Groovy java.sql.SQLException: 找不到适合 jdbc:sqlserver:// 的驱动程序

Groovy java.sql.SQLException: No suitable driver found for jdbc:sqlserver://

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

这是我的代码

// 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 文件。

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

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

The @GrabConfig statement is necessary to make sure the system classloader is used. This ensures that the driver classes and system classes like java.sql.DriverManager are in the same classloader.