2016-12-12 1 views
0

カーソルを返すプロシージャにアクセスしようとしていますが、結果セットがnullではありません。resultset.next()はfalseを返しています。私の手続きと私のJavaコードについては以下を参照してください。ResultSetがnullではありませんまだresultet.next()がfalseを返しています

これは私の手順です:

PROCEDURE get_app_biz_summary (p_application_name_i IN  VARCHAR2, 
           p_summary_o    OUT SYS_REFCURSOR) IS BEGIN IF p_application_name_i = 'ALL' THEN 
     OPEN p_summary_o FOR 
      SELECT application_name, 
        creation_date, 
        SUM (success_count) success, 
        SUM (error_count) "error", 
        SUM (warning_count) warning 
      FROM xxcss_sfm_app_biz_summary 
      WHERE 1 = 1 AND creation_date >= SYSDATE - 4 
     GROUP BY application_name, creation_date; ELSE 
     OPEN p_summary_o FOR 
      SELECT application_name, 
        biz_process_name, 
        creation_date, 
        SUM (success_count) success, 
        SUM (error_count) "error", 
        SUM (warning_count) warning 
      FROM xxcss_sfm_app_biz_summary 
      WHERE application_name = 
        NVL (p_application_name_i, application_name) 
        AND creation_date >= SYSDATE - 4 
     GROUP BY application_name, biz_process_name, creation_date; END IF; END get_app_biz_summary; 

END XXCSS_ORDER_STATUS_PKG; 

/ と、これは私のJavaコードです:

try { 
      OracleCallableStatement cs = (OracleCallableStatement)jdbcTemplate 
     // CallableStatement cs=jdbcTemplate 
        .getDataSource() 
        .getConnection() 
        .prepareCall(
          "{call APPS.XXCSS_ORDER_STATUS_PKG.GET_APP_BIZ_SUMMARY(?,?)}"); 

      cs.setString(1, appName); 
      cs.registerOutParameter(2, OracleTypes.CURSOR); 
      cs.execute(); 
      resultSet= (OracleResultSet)cs.getCursor(2); 
      if(resultSet==null) 
       System.out.println("resultset null...."); // resultset is not null 
      System.out.println(resultSet.next()); // its returning false 
      while(resultSet.next()){ 
      System.out.println("in while"); 
       IBSave ibSave=new IBSave(); 
       ibSave.setApplicationName(resultSet.getString("APPLICATION_NAME")); 
+0

これは役に立ちますか? http://stackoverflow.com/questions/15517736/iterating-over-resultset-and-adding-its-value-in-an-arraylist – GhostCat

+1

プロシージャはデータを返しますか? nullでないと、結果セットにデータがあることを意味しません。 –

答えて

0

あなたのデータベースは、データ

2.Canを返していることを確認してください1.CanあなたはresultSet= (OracleResultSet)cs.getCursor(2); でチェックしてください。

これが役立ちますように!

1

ドキュメントごとに、resultSet.next()を不必要にコールしないでください。 - http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/sql/ResultSet.java#ResultSet.next%28%29。 あなたが

System.out.println(resultSet.next()); // its returning false 

を呼び出した場合、それは次の行にカーソルを移動します。 と再び

while(resultSet.next()){ 

を呼び出すには、実際にあなたの第二列を指摘しています。したがって、結果セットで返されるレコードは1つだけです。

関連する問題