如何选择使用哪个 JDBC 驱动程序? [关闭]
Posted
技术标签:
【中文标题】如何选择使用哪个 JDBC 驱动程序? [关闭]【英文标题】:How to choose which JDBC driver to use? [closed] 【发布时间】:2016-10-03 00:13:46 【问题描述】:我已将 mysql 连接器依赖项和 h2database 依赖项包含到我的项目中。然后我尝试获取 H2 JDBC 连接,但是从看起来像 MySQL JDBC 连接器的地方抛出了一个异常。
DriverManager.getConnection("jdbc:h2:mem:test", "sa", "");
抛出的异常是这样的:
com.mysql.cj.core.exceptions.WrongArgumentException: Connector/J cannot handle a database URL of type 'jdbc:h2:'.
如何同时访问 H2 数据库和 MySQL 数据库?
【问题讨论】:
这不应该发生。你做了什么特别的事情来让他们注册吗? 我投票决定将此问题作为离题结束,因为这是一个已知错误并且已经过验证,但除了我的答案中的解决方法之外,还没有提供解决方案。跨度> 我无法使用 mysql 5.7.15 和最新版本的 connector/j (6.0.4) 重现此错误。您能否分享足够的 Java 代码和您的确切设置? 【参考方案1】:这是一个报告的错误:
Bug #82896
[7 Sep 21:33] Artem Lodygin 描述:尝试连接到 mySql 具有不受支持的 URL 的 JDBC 驱动程序导致 WrongArgumentException stacktrace 打印到控制台,如:
com.mysql.cj.core.exceptions.WrongArgumentException:连接器/J 无法处理类型为“jdbc:h2:mem:test”stacktrace 的数据库 URL 关注
当系统中注册了多个 JDBC 驱动程序时,它发生在 每次连接都尝试链接到 mysql 下的所有驱动程序。
预期的行为以 SQLException 静默失败。
如何重复:将 mysql 连接器 jar 放入类路径。不要放 com.h2database 驱动程序进入类路径。执行以下代码:
DriverManager.getConnection("jdbc:h2:mem:test", null, null);
建议修复:删除“e.printStackTrace();”从方法 ConnectionUrl getConnectionUrlInstance(字符串 connString,属性 信息)
【讨论】:
唯一的答案是删除H2?为什么不删除mysql呢?我确信有一种解决方法是可能的,因为在我的 ETL 案例中,我能够处理两个 jdbc 连接。我会调查这个,但对我来说,这个答案(仅删除 h2)是不可接受的,如果用户确实需要 h2 连接 @ChristianMICHON 这不是答案,这是确保没有先注册 H2 驱动程序的复制步骤,这可能导致报告的问题不会发生。 我刚选择使用 5.1.39 连接器,输出停止发生。以上是关于如何选择使用哪个 JDBC 驱动程序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章