首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OrientDB和PostgreSQL JDBC驱动程序正在发生冲突(InvocationTargetException):除了JDBC之外,还有OrientDB JAR吗?

OrientDB和PostgreSQL JDBC驱动程序正在发生冲突(InvocationTargetException):除了JDBC之外,还有OrientDB JAR吗?
EN

Stack Overflow用户
提问于 2015-12-11 06:32:24
回答 2查看 189关注 0票数 0

我的应用程序将OrientDB和PostgreSQL数据库用于不同的目的。

看起来他们以前可以共存,但是今天我的代码停止工作了。调试时,当我期望OrientDB驱动程序连接到PostgreSQL数据库时,PostgreSQL驱动程序似乎试图连接到PostgreSQL数据库。

以下是事件的顺序:

  1. OrientDB连接(使用OrientGraphFactory.setupPool()),事务启动。
  2. 在PostgreSQL数据库上进行连接尝试,在尝试创建连接对象时发生错误。

下面是创建PostgreSQL连接的代码段:

代码语言:javascript
复制
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(
    "jdbc:postgresql://" + [...]);

return connection;

在InvocationTargetException ()行中抛出一个DriverManager.getConnection。下面是堆栈跟踪,清楚地表明试图连接的是OrientDB驱动程序:

代码语言:javascript
复制
Error on opening database 'jdbc:postgresql://[hostname]/[db_name]'
com.orientechnologies.orient.core.exception.ODatabaseException: Error on opening database 'jdbc:postgresql://[hostname]/[db_name]'
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.<init>(ODatabaseDocumentTx.java:204)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.<init>(ODatabaseDocumentTx.java:168)
    at com.orientechnologies.orient.jdbc.OrientJdbcConnection.<init>(OrientJdbcConnection.java:62)
    at com.orientechnologies.orient.jdbc.OrientJdbcDriver.connect(OrientJdbcDriver.java:52)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)

实际上,JDBC驱动程序似乎正在发生冲突。

在本例中,我实际上不需要使用OrientDB的JDBC功能。但是,我找不到不包含OrientDB的JDBC。主页允许您下载JDBC-all或JDBC专用。在哪里可以找到绑定到单个JAR中但没有JDBC的所有依赖项的JAR?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-11 11:10:00

这可能不是由驱动程序本身造成的,而是由DriverManager“混淆”了哪个驱动程序处理哪个URL。

您可以通过直接向驱动程序请求连接来绕过DriverManager

代码语言:javascript
复制
Driver drv = new org.postgresql.Driver();
Properties props = new Properties();
props.put("username", "foo_user");
props.put("password", "database_password");
Connection connection = drv.getConnection("jdbc:postgresql://dbhost/db_name", props);

不相关,但是:Class.forName("org.postgresql.Driver");在当前的Java和驱动程序版本中需要更长的时间。

票数 1
EN

Stack Overflow用户

发布于 2015-12-11 11:10:18

我在这里解决了问题:

https://github.com/orientechnologies/orientdb/commit/8e0f4bed41999cf68ae9de229b3ff6a4260813da

对于DriverManager如何注册驱动程序然后调用getConnection方法,这是一个误解。

解决方案。我的建议是根本不使用orientdb jdbc- all jar。如果您不需要在应用程序中使用并通过JDBC访问它,那么它确实太大了。

相反,使用您的依赖关系管理框架(maven,gradle?)要导入定向jars,如果您需要与远程db交互,可能只导入orient客户机,如果您需要在应用程序中嵌入orient,则可能更多。

如果您需要通过JDBC与远程的orientdb交互,请只使用che orientdb jdbc。但是您需要一个固定的版本,所以您应该从源代码构建它,或者等待下一个2.1.8版本。

如果您想继续使用jdbc fat jar,您可以立即从源代码构建它,或者可以等待下一个修补程序发行版(2.1.8)。

希望你能帮上忙,向你问好

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34217426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档