【问题标题】:How to choose which JDBC driver to use? [closed]如何选择使用哪个 JDBC 驱动程序? [关闭]
【发布时间】: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 代码和您的确切设置?

标签: java mysql jdbc h2


【解决方案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 连接器,输出停止发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多