私のコードでは、テーブルを (選択、挿入、更新) するために 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();
}
}
前もって感謝します。