我对groovy很陌生,对我得到的groovyjava.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')
相同的SQLJDBC连接字符串("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:pathtomyjars groovy-sql-test.groovy
其中,在D:pathtomyjars
目录中,我同时拥有sqljdbc41.jar
和mssql-jdbc-7.2.2.jre8.jar
文件。
您必须使用@GrabConfig(systemClassLoader=true)
才能使用系统classloader,从而获取jdbc驱动程序。
发件人https://groovy-lang.org/databases.html#_connecting_using_grab
@GrabConfig
语句是确保系统使用类加载器。这确保了驱动程序类和系统像java.sql.DriverManager
这样的类在同一个类加载器中。