准备好的语句中遇到意外的空指针

时间:2014-02-06 13:57:21

标签: jdbc informix

我在Informix(11.50.FC8)中存储了一个返回多个值的存储过程。

以下代码(它是更复杂查询的一部分)失败:

String sql = "SELECT * FROM TABLE(FUNCTION my_stored_procedure(?))";
Connection con = dataSource.getConnection();
PreparedStatement ps = con.prepareStatement(sql);

异常跟踪是:

 Exception in thread "main" java.sql.SQLException: 
 System error - unexpected null pointer encountered.
 at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:379)
 at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:3109)
 at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3419)
 at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2282)
 at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2202)
 at com.informix.jdbc.IfxSqli.executePrepare(IfxSqli.java:1093)
 at com.informix.jdbc.IfxResultSet.executePrepare(IfxResultSet.java:189)
 at com.informix.jdbc.IfxPreparedStatement.setupExecutePrepare(IfxPreparedStatement.java:193)
 at com.informix.jdbc.IfxPreparedStatement.<init>(IfxPreparedStatement.java:171)
 at com.informix.jdbc.IfxSqliConnect.prepareStatement(IfxSqliConnect.java:1964)
 at test.Main.main(Main.java:27)

如果我将其写为

,查询不会失败
SELECT * FROM TABLE(FUNCTION my_stored_procedure(1))

问题:如何指定参数?

我尝试将CallableStatement准备为{call my_stored_procedure(?)}(并且它有效)但我需要构建一个查询,该查询使用不同的参数合并来自相同过程的多个结果,如:

SELECT * FROM TABLE(FUNCTION my_stored_procedure(1))
UNION SELECT * FROM TABLE(FUNCTION my_stored_procedure(2))

1 个答案:

答案 0 :(得分:0)

您已向我们展示了一段代码,但没有设置PreparedStatement参数。

此代码应如下所示:

PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();
...

PS如果出现问题,请尝试使用最新的JDBC驱动程序并向我们展示其版本。例如,我使用JDBC.4.10.JC2DE.tar

中的驱动程序
相关问题