2013-09-25 45 views
0

在方法resultset.next下面的代码()被返回false为什么ResultSet.next时()返回null

String sql = "{?= call fun_consolidate_retrieve_vector_receipt_payment_details(?,?,?,?,?,?)}"; 
     callableStatement = con.prepareCall(sql); 
     callableStatement = con.prepareCall(" {? = call fun_retrieve_vector_receipt_payment_details(?,?,?,?,?,?)}"); 
     callableStatement.registerOutParameter(1, Types.OTHER); 
     callableStatement.setString(2, "PAYMENT"); 
     callableStatement.setInt(3, 47); 
     callableStatement.setString(4, "24-05-2013"); 
     callableStatement.setString(5, "24-09-2013"); 
     callableStatement.setString(6, "Y"); 
     callableStatement.setObject(7, resultSet); 
     con.setAutoCommit(false); 
     callableStatement.execute(); 

     resultSet = (ResultSet) callableStatement.getObject(1); 
     boolean next = resultSet.next(); 

为何如此???如果我从我的数据库中调用相同的存储过程,将导致2行输出(提供与java代码中相同的输入)

+0

您可能想再次看看那些传递日期字符串的那些'setString'调用:您确定日期按照您期望的方式被解析吗? – ruakh

+0

我认为这个链接可以帮助http://docs.oracle.com/cd/E17952_01/refman-5.5-en/connector-j-usagenotes-statements-callable.html – ahmedalkaff

+0

请告诉我们函数fun_consolidate_retrieve_vector_receipt_payment_details的来源 –

回答

1

您的标题表达您的困惑。 ResultSet.next()返回一个布尔值,不是任何可以为空的值。您需要在 getObject()之前将其称为,而不是之后。

+0

接下来是错误的....为什么结果集里面没有任何数据 – user2291144

+0

因为您调用的未知存储过程没有选择任何行。您还应该考虑定义一次调用它的SQL,而不是两次。 – EJP