在Eclipse中,我得到這個錯誤:**錯誤ORA-01000:最大打開遊標超出 我已經關閉連接塊最後,但我不知道爲什麼我收到這個錯誤,這裏是我的代碼JAVA。 請幫幫我!錯誤ORA-01000:超過最大打開遊標
for (DossierAMO dos = null; it.hasNext();) {
PreparedStatement ps = null;
ResultSet rs = null;
PreparedStatement ps2 = null;
ResultSet rs2 = null;
try {
dos = (DossierAMO) it.next();
//PreparedStatement ps = null;
//ResultSet rs = null;
/*try
*
{*/
System.out.println("Imma"+dos.getImma());
ps = cnnOracle.getConnexion().prepareStatement(
"select count(IMM_IMM_V_NUM_IMM) from [email protected]_dist where SAL_C_DS =21 and IMM_IMM_V_NUM_IMM =?",
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY
);
ps.setString(1,dos.getImma());
rs = ps.executeQuery();
if (rs.next()){
if (rs.getInt(1) != 0)
//System.out.println("> Ecriture des dossiers d'indus dans le fichier d'indus2");
fichierIndius2.ecrireDossier(dos);
else
{
ps2 = cnnOracle.getConnexion().prepareStatement(
"select count(DOS_N_NUM_DOS) from [email protected]_dist where IMM_IMM_V_NUM_IMM =?",
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY
);
ps2.setString(1,dos.getImma());
rs2 = ps2.executeQuery();
if (rs2.next()){
if (rs2.getInt(1) != 0)
fichierIndius2.ecrireDossier(dos);
else{
fichierIndius.ecrireDossier(dos);
}}}}
} catch (Exception ex) {
requete.fermer();
fichierIndius.fermerSansException();
fichierIndius2.fermerSansException();
cnnAS400.fermerConnexion();
cnnAS400FO.fermerConnexion();
cnnOracle.fermerConnexion();
System.err
.println("Erreur d'écriture dans le fichier d'indus!/ EXC : "
+ ex);
return;
}
finally{
if (rs != null)
try {
rs.close();
} catch (Exception exx) {
}
if (rs2 != null)
try {
rs2.close();
} catch (Exception exx) {
}
if (ps != null)
try {
ps.close();
} catch (Exception exx) {
}
if (ps2 != null)
try {
ps2.close();
} catch (Exception exx) {
}
}
}
你爲什麼將rs和ps設置爲null?這將阻止那些在finally塊中被關閉的人。而且你正在嘗試*關閉'ps'而不是'ps2'。你什麼時候認爲你正在關閉連接 - 因爲你沒有指向你打開的兩個變量的變量? (除了可能在異常處理程序,取決於這些調用做什麼。) –
亞歷克斯我已經修改這些行,但我仍然得到相同的錯誤! – salma
在回答問題後修改問題不是很有幫助。你仍然沒有關閉連接。 –