我的应用程序将OrientDB和PostgreSQL数据库用于不同的目的。
看起来他们以前可以共存,但是今天我的代码停止工作了。调试时,当我期望OrientDB驱动程序连接到PostgreSQL数据库时,PostgreSQL驱动程序似乎试图连接到PostgreSQL数据库。
以下是事件的顺序:
下面是创建PostgreSQL连接的代码段:
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(
"jdbc:postgresql://" + [...]);
return connection;在InvocationTargetException ()行中抛出一个DriverManager.getConnection。下面是堆栈跟踪,清楚地表明试图连接的是OrientDB驱动程序:
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?
发布于 2015-12-11 11:10:00
这可能不是由驱动程序本身造成的,而是由DriverManager“混淆”了哪个驱动程序处理哪个URL。
您可以通过直接向驱动程序请求连接来绕过DriverManager:
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和驱动程序版本中需要更长的时间。
发布于 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)。
希望你能帮上忙,向你问好
https://stackoverflow.com/questions/34217426
复制相似问题