windows - 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.jar
和mssql-jdbc-7.2.2.jre8.jar
文件。
解决方案
您必须使用@GrabConfig(systemClassLoader=true)
系统类加载器,从而获取 jdbc 驱动程序。
来自https://groovy-lang.org/databases.html#_connecting_using_grab
该
@GrabConfig
语句是确保使用系统类加载器所必需的。这确保了驱动程序类和系统类java.sql.DriverManager
都在同一个类加载器中。
推荐阅读
- rust - 转换流
- , _>> 到流
- >
- , _>> 到流
- jwt - 将“承载”作为前缀添加到您的网络令牌的原因是什么?
- python - 我一直在 'int' 对象中运行不可下标( board[random_coord[0],random_coord[1]] = 'O' )
- bash - 有没有办法动态加载bash变量
- javascript - React 无法在我的 KeyDown 事件中检测到“删除密钥”
- javascript - 未处理的拒绝(TypeError):已解析未定义并且在控制台中“未捕获(在承诺中)TypeError:已解析未定义”
- javascript - 列出本地存储数据
- python - 使用 ngrok 进行 Python 套接字服务器端口转发
- java - 一个场景的Java系统设计
- reflection - 为什么我在java中通过反射改变字符串s1常量,其他s2,s3也改变了?