在groovy中连接mysql时出现“找不到合适的驱动程序”的错误

7
    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    import com.mysql.jdbc.*
    import groovy.sql.*

    /*  the commented code works fine

    MysqlDataSource ds = new MysqlDataSource()
    ds.user = 'root'
    ds.password = ""
    ds.url = 'jdbc:mysql://localhost:3306/test'

    Sql sql=Sql.newInstance(ds)

    sql.close()
    */
    d=Class.forName("com.mysql.jdbc.Driver").newInstance()
    println d.class // class com.mysql.jdbc.Driver


    Sql sql=Sql.newInstance(
    'jdbc:mysql://localhost:3306/test',
    'root',
     "",
    'com.mysql.jdbc.Driver'
    )

代码注释得很好,我可以获得Driver实例。
但当我使用时,

     Sql sql=Sql.newInstance(
     'jdbc:mysql://localhost:3306/test',
     'root',
      "",
     'com.mysql.jdbc.Driver'
     )

这里抛出了一个异常:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test

我无法解决它,有没有人来帮助我?


你是如何将驱动程序添加到类路径中的? - tim_yates
@tim_yates 我使用 groovyConsole 并使用 "add jar(s) to classpath" 命令。将 "@GrabConfig(systemClassLoader = true) @Grab(group='mysql', module='mysql-connector-java', version='5.1.27')" 添加到代码中可以解决问题,但我仍然不知道为什么... - fairjm
因为Java中的JDBC驱动程序管理查看系统类加载器以获取JDBC jars。因此,您需要使用@GrabConfig,或者您需要在类路径上启动带有jar的控制台,即:groovyconsole -cp mysql-connector-java-5.1.27-bin.jar。我认为没有办法告诉“添加jar到路径”选项使用systemClassLoader :-( - tim_yates
@tim_yates 是的,就像你说的那样,谢谢 ^_^。 - fairjm
已添加为答案 :-) - tim_yates
1个回答

23

在Java中,JDBC驱动程序管理会查找系统类加载器中的JDBC JAR包。

因此,要在GroovyConsole中运行访问 MySQL 的脚本,您需要使用以下其中一种方法:

@GrabConfig( systemClassLoader=true )
@Grab( 'mysql:mysql-connector-java:5.1.27' )

在您的脚本中,或者您需要在类路径上使用该jar启动控制台,方法是运行以下命令:

在你的脚本中,或者你需要在类路径上用这个jar启动控制台,方法是运行它的命令:

groovyconsole -cp mysql-connector-java-5.1.27-bin.jar

我认为没有办法告诉“添加jar到路径”选项使用systemClassLoader:-(


不错。我这里也遇到了同样的问题,现在已经解决了! - funkygono
谢谢 - 也适用于MariaDB客户端,例如'org.mariadb.jdbc:mariadb-java-client:2.2.3'。然而...我发现在(Cygwin)提示符下运行自包含脚本(而不是Gradle)时需要它...但在Eclipse中我不需要这个@GrabConfig东西,实际上包括它会导致此错误:org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:转换期间未找到合适的ClassLoader:“grab”... Grrr... - mike rodent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接