【发布时间】:2014-12-04 03:23:19
【问题描述】:
我正在使用 Postgresql 8.4,我的应用程序正在尝试连接到数据库。 我已经注册了驱动:
DriverManager.registerDriver(new org.postgresql.Driver());
然后尝试连接:
db = DriverManager.getConnection(database_url);
(顺便说一句,我的 jdbc 字符串类似于:jdbc:postgresql://localhost:5432/myschema?user=myuser&password=mypassword)
我尝试了各种版本的 jdbc 驱动程序并得到两种类型的错误:
使用 jdbc3:
Exception in thread "main" java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.getSchema()Ljava/lang/String;
使用 jdbc4:
java.sql.SQLFeatureNotSupportedException: Il metodo ½org.postgresql.jdbc4.Jdbc4Connection.getSchema()╗ non Þ stato ancora implementato.
这意味着:方法 org.postgresql.jdbc4.Jdbc4Connection.getSchema() 尚未实现。
我错过了一些东西,但我不知道是什么..
-------- 已解决 ---------
问题不在于连接字符串或驱动程序版本,问题在于getConnection()方法正上方的代码:
db = DriverManager.getConnection(database_url);
LOGGER.info("Connected to : " + db.getCatalog() + " - " + db.getSchema());
似乎 postgresql 驱动程序没有 getSchema 方法,因为 java 控制台经常试图对我说..
【问题讨论】:
-
您使用的驱动程序是什么版本? jar 的文件名包含版本号
-
我用过:8.4-702.jdbc3、8.4-702.jdbc4、9.2-1002.jdbc3、9.2-1002.jdbc4、9.2-1003.jdbc3、9.2-1003.jdbc4、9.3 -1102.jdbc3、9.3-1102.jdbc4 可能还有其他几个版本
-
请显示您的测试的完整代码。另外,你的 JVM 版本是多少?
-
关于 cmets 讨论后的简短版本 - 与
Class.forName相同的错误。使用 JDK 1.7。所以我认为你的类路径有多个不兼容的 PgJDBC 版本(可能嵌套在其他 jars 中?)或者其他东西被严重破坏了。我需要查看一个独立的测试用例来进一步帮助您。 -
现在我使用的是 9.3-1102-jdbc41,但我认为现在我已经删除了有问题的方法( db.getSchema() ),它也可以与其他版本一起使用。 Java 版本 7。
标签: postgresql jdbc driver