我在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))
答案 0 :(得分:0)
您已向我们展示了一段代码,但没有设置PreparedStatement参数。
此代码应如下所示:
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();
...
PS如果出现问题,请尝试使用最新的JDBC驱动程序并向我们展示其版本。例如,我使用JDBC.4.10.JC2DE.tar