2014-02-06 2 views
-1

У меня хранимая процедура в 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

Вы показали нам кусок кода, но нет набора параметров PreparedStatement.

Этот код должен выглядеть следующим образом:

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

PS В случае возникновения проблем попробуйте использовать новейший драйвер JDBC и показать нам свою версию. Например, я использую драйверы от JDBC.4.10.JC2DE.tar

+0

Я проверю версию драйвера, но учтите, что исключение генерируется в 'prepareStatement', а не в' executeQuery'. – Javier

Смежные вопросы