首页 > 解决方案 > Groovy java.sql.SQLException:找不到适合 jdbc:sqlserver:// 的驱动程序

问题描述

我对 groovy 很陌生java.sql.SQLException,对我得到的 Groovy 感到很困惑。

这是我的代码

// https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
@Grapes(
        @Grab(group='com.microsoft.sqlserver', module='mssql-jdbc', version='7.2.2.jre8')
)

import groovy.sql.*
 
def username = xxx, password = yyy
 
// Create connection to MSSQL with classic JDBC DriverManager.
def db = Sql.newInstance("jdbc:sqlserver://localhost:1433;database=tempdb;", username, password, 'com.microsoft.sqlserver.jdbc.SQLServerDriver')

相同的 SQL JDBC 连接字符串 ( "jdbc:sqlserver://localhost:1433;database=tempdb;", 'com.microsoft.sqlserver.jdbc.SQLServerDriver') 适用于我的其他情况,例如 Java 或 JMeter,但不适用于 groovy。这就是我得到的:

> groovy groovy-sql-test.groovy
Picked up _JAVA_OPTIONS: -Xms512M -Xmx1g
Caught: java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost:1433;database=tempdb;
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost:1433;database=tempdb;
        at groovy-sql-0.run(groovy-sql-0.groovy:11)

这是在Win10下运行的。

我也试过

groovy -cp D:\path\to\my\jars groovy-sql-test.groovy

D:\path\to\my\jars目录中,我同时拥有sqljdbc41.jarmssql-jdbc-7.2.2.jre8.jar文件。

标签: windowsjdbcgroovymssql-jdbc

解决方案


您必须使用@GrabConfig(systemClassLoader=true)系统类加载器,从而获取 jdbc 驱动程序。

来自https://groovy-lang.org/databases.html#_connecting_using_grab

@GrabConfig语句是确保使用系统类加载器所必需的。这确保了驱动程序类和系统类java.sql.DriverManager都在同一个类加载器中。


推荐阅读