- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一些 gradle 插件,现在我遇到了 DriverManager 没有看到 buildscript 依赖项中定义的 JDBC 驱动程序的问题:
我有下一个 build.gradle 文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("com.h2database:h2:1.4.196")
}
}
plugins {
id "someplugin"
}
apply plugin: 'groovy'
DriverManager.getConnection("jdbc:h2:mem:", "sa", "")
No suitable driver found for jdbc:h2:mem:
最佳答案
好吧,有一个关于为什么 DriverManager
的答案。不像您使用它以及如何使其工作那样工作,并且有一个关于如何正确使用 Groovy 中的 SQL(这是 Gradle 脚本的基础)的答案。我将从使用 Groovy 中的 SQL 的正确方法开始:
从 Gradle/Groovy 正确使用 SQL:
不幸的是要使用 Groovy Sql 类,将驱动添加到 buildscript 类路径是不够的,您需要将驱动添加到正确的类加载器中,否则将无法正常工作。
除了将驱动程序添加到 JVM 的 ext 目录之外,您还可以像这样动态地执行此操作:
configurations { jdbc }
jdbc 'com.h2database:h2:1.4.196'
def sqlClassLoader = Sql.classLoader
configurations.jdbc.each { sqlClassLoader.addURL it.toURI().toURL() }
Sql.withInstance('jdbc:h2:mem:', 'sa', '', 'org.h2.Driver') {
it.execute 'your sql here'
}
DriverManager
:
DriverManager
由于 Groovy 的动态性,就像您所做的那样。在您使用的方法中,
DriverManager
尝试从调用堆栈中动态找到调用者类,然后使用该类的类加载器来查找数据库驱动程序。使用 Groovy,这是找到的一些动态代理类,因此在其类加载器中找不到数据库驱动程序。
DriverManager
正确的调用者类,如
DriverManager.getConnection("jdbc:h2:mem:", [user: "sa", password: ""] as Properties, getClass())
,它工作正常。或者,也可以不提供任何调用者类,如
DriverManager.getConnection("jdbc:h2:mem:", [user: "sa", password: ""] as Properties, null)
在这种情况下,使用当前线程上下文类加载器,这也很好。
DriverManager
已加载,它会扫描系统属性
jdbc.drivers
以及提供
java.sql.Driver
的所有服务服务。它遍历那些找到的类并实例化它们。驱动程序本身通常会响应向
DriverManager
注册自己。他们现在可以这样做,以便稍后像我上面建议的那样进行自动查找。
DriverManager
(例如,在您以前的尝试中),那么该类已经加载。如果您稍后将 buildscript 依赖项添加到 H2(或在它不存在但
DriverManager
已加载的版本之后运行它存在的构建),则该类已加载并且不会查找现在位于的驱动程序类路径。
DriverManager.loadInitialDrivers()
在调用 getConnection
之前确保再次完成查找并自动添加 H2 驱动程序。更好,但使用私有(private)方法。 ServiceLoader
自己加载所有Driver
类路径中的类,以使它们向 DriverManager
进行自我注册喜欢 ServiceLoader.load(Driver.class).collect()
在 getConnection
之前称呼。可能是最优雅的解决方案。 getConnection()
之前只需加载类使其通过 org.h2.Driver.toString()
自行注册getConnection()
之前只需加载类使其通过 Class.forName 'org.h2.Driver'
自行注册关于jdbc - DriverManager 在 gradle 自定义插件的任务中看不到依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55262588/
调用oracle函数时DriverManager.getConnection与DriverManager.registerDriver()有什么区别? 我经常只使用DriverManager.getC
我想对这段代码进行单元测试,以验证调用了哪个 DriverManager.getConnection() 。DriverManager.getConnection(url,user,pass) 或 D
Apache Tomcat 6.0.35 hibernate 问题 com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@352e71c4
我正在尝试为调用 DriverManager.getConnection() 的方法编写单元测试。我正在使用 PowerMock 1.5 和 easymock。不知何故,Powermock 无法模拟
最近,我们在Hive连接中添加了SSL。我们通过添加 ssl=1;sslTrustStore=C:\\keytabs\\keys.truststore;trustStorePassword=foo 到
我有以下代码来测试新服务器上访问数据库的链接,一切都适用于现有服务器,并且我能够访问该文件夹。 !if.exists 返回 true,我可以使用 Runtime.getRuntime().exec("
我有一个应用程序,其目的是支持 jdbc:hive:// 和 jdbc:hive2:// 协议(protocol)的 JDBC 连接。以下代码加载这两种协议(protocol)相应的 JDBC 驱动程
尝试连接到我的 Oracle 11.1.0.7.0 时数据库使用 jdbc 和 ojdbc6.jar在匹配版本中,我发现了两个变体。 假设一个字符串 DBURL 形式的 jdbc:oracle:thi
我一直在尝试检测 getconnection 方法以获取在 JDBC 连接建立期间传递的 DB_URL。据我所知,DriverManager 的检测工作正常,因为注入(inject)部分工作正常而不会
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 Java 和 mysql 作为数据库,但遇到了一个奇怪的问题:我的一位客户的连接非常不稳定,有时丢包率可能很高。好吧,我知道这不是软件的错误,但我去那里进行了测试,当程序调用“Driver
我正在开发一个 Java 应用程序,该应用程序可以连接到我的办公室网络,也可以不连接到我的办公室网络。 我的问题是,当用户未连接时,DriverManager.getConnection() 需要长达
我们在找出与 DriverManager 建立连接时收到错误消息的原因时遇到了一些麻烦。 这是我们的代码 package Databank; import java.sql.Connection; i
我有一个类,它连接到 H2 数据库并运行多个 SQL 语句。 public class H2Persistence implements IPersistence { private Conn
我正在尝试将 Java 程序连接到本地主机中的数据库。我的问题看起来很简单,但我找不到任何答案。 当我尝试编译时,出现以下错误: DriverManager.getConnection cannot
我正在尝试使用标准 JDBC 方式连接到数据库 connection = DriverManager.getConnection(url, username, password); 是否有连接超时的最
这个问题在这里已经有了答案: Connect Java to a MySQL database (14 个答案) 关闭 8 年前。 我正在尝试使用一个 Java 类,它在过去对我来说已经非常有用,以
我正在编写一些 gradle 插件,现在我遇到了 DriverManager 没有看到 buildscript 依赖项中定义的 JDBC 驱动程序的问题: 我有下一个 build.gradle 文件:
我正在编写一些 gradle 插件,现在我遇到了 DriverManager 没有看到 buildscript 依赖项中定义的 JDBC 驱动程序的问题: 我有下一个 build.gradle 文件:
我正在使用 jruby,并通过 db2jcc4.jar 文件调用 DB2/BIGSQL 数据库。我在插入和选择方面都建立了完美的连接,然后突然间我开始收到错误“未初始化的常量 DriverManage
我是一名优秀的程序员,十分优秀!