【问题标题】:Grails + MySQL: No suitable driver foundGrails + MySQL:找不到合适的驱动程序
【发布时间】:2026-02-10 13:05:01
【问题描述】:

我正在运行 grails 2.4.0,并且正在尝试使用 groovy.sql 访问 MySQL 数据库。我知道这个问题会在搜索中弹出,但这些解决方案不起作用。我一直在...

No suitable driver found for jdbc:mysql://...
  • 我已经检查并仔细检查了网址,它的格式正确。
  • 我已将 mysql-connector-java-5.1.30-bin.jar 放入我的项目库中
  • 我还在 BuildConfig 的依赖项块中取消了“runtime 'mysql:mysql-connector-java:5.1.29'”的注释(不与 lib jar 一起使用)

错误永远不会改变。我在这里做错了什么?

例如,我有一个带有方法的服务类,我想连接到 MySQL 数据库并在不使用 Grails 数据源机制的情况下提取数据。

import groovy.sql.Sql

class TestService {

def doStuff() {
    def sql = Sql.newInstance('jdbc:mysql://localhost:3306/my_db', 'username', 'password', 'com.mysql.jdbc.Driver')
    sql.eachRow("select * from some_table") {...

【问题讨论】:

  • 您说“我正在尝试使用 groovy.sql 访问 MySQL 数据库”。 “使用 groovy.sql”是什么意思?您的问题的解决方案可能取决于此。
  • 我用我正在尝试做的示例编辑了这个问题。

标签: mysql grails groovy


【解决方案1】:

如果您已将其添加到您的 Lib 文件夹中,则无需取消注释但将其注释掉,也无需告诉 grails 您有 mysql 依赖项。 并确保你有可能是非伪造的驱动程序 jar。我使用了以下内容:

方言 = "org.hibernate.dialect.MySQL5InnoDBDialect"

mysql-connector-java-5.1.30-bin.jar

好的,如果这些工作。

您是否尝试过这种方式的连接字符串声明,并尝试使用如下数据源

def db = [url:'jdbc:mysql://localhost:3306/my_db?autoreconnect=true', user:'root',
         password:'',driver:'com.mysql.jdbc.Driver']

def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)

要测试驱动程序是否存在问题或配置错误,请使用实际的数据源设置进行测试,假设您的数据源有

dataSource {
    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
    driverClassName = "com.mysql.jdbc.Driver"
    username = "root"
    password = "root"
}

这也可以通过传递来实现

datasourceSql.newInstance(datasource)

也可以试试这个:

import java.sql.Connection
import java.sql.DriverManager
import javax.sql.DataSource
import groovy.sql.Sq

driver = com.mysql.jdbc.Driver // can be ommited

Connection conn = DriverManager.getConnection(
    'url:'jdbc:mysql://<server>/<database>?user=<username>&password=<password>');

Sql sql = new Sql(conn);

也试试这个

@GrabConfig(systemClassLoader = true)

在你的@Grab 之后,然后:

@Grab('mysql:mysql-connector-java:5.1.25')
@GrabConfig(systemClassLoader = true)
import groovy.sql.Sql

def sql = Sql.newInstance(
    'jdbc:mysql://localhost/books', 
    'root',
    '', 
    'com.mysql.jdbc.Driver'
)

如果没有工作将mysql jar文件带到这个groovy类下,这可能很愚蠢,但一定没有理由不工作......干杯!!

Reference 1 : && Reference 2 :

【讨论】:

  • 因此将其添加为具有方言的数据源是可行的,但这不是我想要做的。我最终希望我的数据源成为一个 pgsql 数据库,但我需要偶尔从旧的 mysql 数据库中提取。那个遗留数据库是我想使用 groovy.sql.Sql 的。
  • 方言在你使用groovy.sql.Sql时是没有意义的。方言仅在您使用 Hibernate 时才相关。
  • @JeffScottBrown - 我知道这一点,但无论出于何种原因,除非我在 Datasource.groovy 中将连接设置为数据源,否则问题仍然存在。现在它可以工作,因为我不需要传统的 grails 数据源,因为我现在只是设置非数据库服务。这在未来会改变,所以我仍在寻找一个长期的解决方案。
  • 这对我来说没有意义。您正在使用 groovy.sql.Sql 并且在问题的任何地方都没有提到 GORM,所以我没有看到任何表明需要涉及 DataSource.groovy 的内容,当然也没有任何内容表明应该使用 Hibernate 方言相关的。它不应该。我不知道你为什么要在 DataSource.groovy 中定义这个东西。
  • 这里的答案讲的是hibernate插件和Hibernate方言。这些都与所写的问题无关。
最近更新 更多