0

私のコードでは、テーブルを (選択、挿入、更新) するために 4 つの準備済みステートメントを使用しています。また、大量のデータを処理する必要があるため、これらのステートメントを for ループ内で使用する必要があります。1 つの db 接続とステートメントのみを使用しています。 for ループの前に一度だけ開かれ、各反復で addBatch() を使用しています。ループの終了後、ステートメントは executeBatch() で実行され、ステートメントは finally ブロックで閉じられますが、2 回目の反復後に MaxOpenPreparedStatements 例外がスローされます!! ! 、それを避けるために私は何ができますか?

try{
     pStat1 = conn.prepareStatement("insert into...");
     pStat2 = conn.prepareStatement("update...");
     pStat3 =  conn.prepareStatement("insert into...");
     pStat4 = conn.prepareStatement("update...");


     for (.....) {
          //set parameters
          pStat1.addBatch();
          //set parameters
          pStat2.addBatch();
          //set parameters
          pStat3.addBatch();
          //set parameters
          pStat4.addBatch();

          }      
            pStat1.executeBatch();
            pStat2.executeBatch();
            pStat3.executeBatch();
            pStat4.executeBatch();
          } catch (Exception e) {
                 e.printStackTrace();
          }finally {
                 if(pStat1!= null){
                       try {
                              pStat1.close();
                       } catch (SQLException e) {
                              e.printStackTrace();
                       }
                 }
                 if(pStat2!= null){
                       try {
                              pStat2.close();
                       } catch (SQLException e) {
                              e.printStackTrace();
                       }
                 }

                 if(pStat3!= null){
                       try {
                              pStat3.close();
                       } catch (SQLException e) {
                              e.printStackTrace();
                       }
                 }

                 if(pStat4!= null){
                       try {
                              pStat4.close();
                       } catch (SQLException e) {
                              e.printStackTrace();
                       }
                 }

前もって感謝します。

4

2 に答える 2

0

問題が解決するかどうかはわかりませんが、解決する可能性があります。一度試してみてください

        pStat1.executeBatch();
          //close pStat1 here
        pStat2.executeBatch();
          //close pStat2 here
        pStat3.executeBatch();
          //close pStat3 here
        pStat4.executeBatch();
          //close pStat4 here
于 2013-05-24T12:41:47.253 に答える