【发布时间】:2019-06-26 10:59:42
【问题描述】:
我一直在尝试升级使用 ojdbc8 连接到 Oracle 12.2 数据库的应用程序中使用的 Java 版本(当前为 8u144)。我最近更新到 8u201 的尝试失败并出现以下错误:
Exception in thread "main" java.lang.NullPointerException
at oracle.net.jndi.JndiAttrs.getAttrs(JndiAttrs.java:215)
at oracle.net.resolver.AddrResolution.<init>(AddrResolution.java:237)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:233)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1438)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:518)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:384)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:273)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:198)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:176)
at Main.main(Main.java:22)
我正在使用 LDAP url,其语法支持和记录类似于以下内容:
"jdbc:oracle:thin:@ldaps://ldap.example.com:7777/sales,cn=OracleContext,dc=com"
虽然我的问题类似于以下问题,但我没有使用 Hibernate,而且这个问题似乎并没有真正回答/解决可能是潜在问题的问题。
Unable to get db connection after Java 8 upgrade
为了简化一切,我将测试简化为仅使用 ojdbc8 和类似以下内容的简单项目:
String url = "jdbc:oracle:thin:@ldaps://....";
OracleDataSource ods = new OracleDataSource();
ods.setUser("indiana");
ods.setPassword("thedoctor");
ods.setURL(url);
Connection conn = ods.getConnection();
PreparedStatement st = conn.prepareStatement("select * from world where temple = 'doom'");
ResultSet rs = st.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("last"));
}
如果我使用完全相同的代码和配置将 Java 切换到 8u144,那么上面的操作就可以了。我很茫然……
更新我已将问题缩小了一些范围,发现中断发生在 Java 8u171。我正在查看该版本的发行说明以及我现在可以找到的任何其他内容。
【问题讨论】:
-
您是否尝试过查看这些更新的发行说明以查看是否进行了任何更改?
-
感谢您的建议。经过更多测试,我已将问题缩小到 8u171 发生的中断。我现在正在查看那些发行说明。
-
这可能是一个 JDK 错误。出于好奇,您是否尝试过使用 JDK11?
-
我没有。我不确定是否可以切换到此应用程序,但无论如何。
-
您使用的是哪个版本的 Oracle JDBC 驱动程序(ojdbc8 只是表示它适用于 Java 8,并不表示特定版本)?
标签: java oracle jdbc java-8 ojdbc