java - HikariCP 准备语句空指针异常

标签 java hikaricp

我正在尝试实现 Hikari 连接池(v 2.3.5)。我已完成所有设置,并且能够从池中检索连接,并设置一个准备好的语句对象。每当我尝试对准备好的语句执行任何操作时,Hikari 都会抛出内部 NPE。

Data Warehouse Task Error
com.hs.task.warehouse.eci.EciConversionException: Failed while converting claims...
    at com.hs.task.warehouse.eci.Claims.convertTable(Claims.java:253)
    at com.hs.task.warehouse.DataWarehouseTask.execute(DataWarehouseTask.java:76)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: java.lang.NullPointerException
    at com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy.setString(PreparedStatementJavassistProxy.java)
    at com.hs.task.warehouse.eci.Claims.convertTable(Claims.java:68)
    ... 3 more

我正在使用一个非常旧的 JDBC 驱动程序来连接专有数据库。我之前曾使用过带有相同驱动程序的 Proxool,没有出现任何问题。

配置:

HikariConfig hconf = new HikariConfig();
                hconf.setDriverClassName("com.dbcswc.fs.jdbc.Driver");
                hconf.setJdbcUrl("=jdbc:fs3:MyServer:9584/MyDB;encryption=off;localport=0");
                hconf.setUsername("user");
                hconf.setPassword("pass");
                hconf.setConnectionTestQuery("select 1 as test from pu");

这是发生错误的地方

PreparedStatement psClaims = con.prepareStatement(sql);
psClaims.setString(1, ECI_DT_FMT.format(lastConvertDate));

调用 setString 时,此时 psClaims 不为 NULL。

最佳答案

为了简单起见,我在帖子中更改了这行代码:

PreparedStatement psClaims = con.prepareStatement(sql);

另一个类正在获取准备好的语句,该类将 autoGenerateKeys 参数发送到驱动程序:

con.prepareStatement(sql, PreparedStatement.NO_GENERATED_KEYS)

经过一些调试,我发现驱动程序返回了 NULL preparedstatement,但 HikariCP 仍然返回了一个PreparedStatement代理对象。 HikariCP 持有对从驱动程序获取的 NULL preparedstatement 的引用,并在每当 preparedstatement 被执行时抛出一个 NPE,例如 setString()。

我什至不确定驱动程序返回 NULL 是否合法,我倾向于认为这是驱动程序中的一个错误,所以我不确定它是否应该在 HikariCP 中解决。我将在那里提出一个包含详细信息的问题,看看他们是否愿意检查这种情况。

关于java - HikariCP 准备语句空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29353363/

相关文章:

java - 虽然 write() 中将 byteval 声明为整数,但为什么 Java I/O 流中只将低位八位写入文件

java - 如何重构循环循环?

java - 当 HikariCP 调试日志的连接总数为 2 时,Spring boot 指标显示 HikariCP 连接创建计数为 1

java - RedHat + MySQL + Tomcat : ERROR 1040: Too many connections (but everything is fine on Ubuntu)

java - Spring Boot 2 : How to configure HikariCP using application. 属性文件

java - 没有辅助 boolean 变量的中断继续?

java - Android Volley 多部分参数名称

java - 除非调用相应的方法,否则 Lambda 主体不会执行

java - 可能考虑使用较短的maxLifetime值——hikari连接池spring boot

java - HikariPool 达到最大连接数