我正在創建一個真正的數據庫密集型java程序,但是我在連接時遇到了一個錯誤。的代碼是:java「數據庫被鎖定」SQL例外
try{
Statement st;
ResultSet rs;
conn = DBConnection.dbconnection();
st = conn.createStatement();
String s = "select * from tab2DB order by Scadenza";
rs = st.executeQuery(s);
while(rs.next()){
ResultSet rs2;
PreparedStatement st2;
conn2 = DBConnection.connection();
String s2 = "select * from Prodotti where Nome = ?";
st2 = conn2.prepareStatement(s2);
st2.setString(1, rs.getString("Prodotto"));
rs2 = st2.executeQuery();
while(rs2.next()){
Date localDate = new Date();
String scadenza = rs.getString("Scadenza");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALIAN);
Date date = format.parse(scadenza);
if(localDate.after(date)){
conn3 = DBConnection.dbconnection();
String query ="insert into tabDB values ('"+nomeord+"','"+prodottoord+"','"+quantitàord+"')";
Statement stmt;
stmt = conn3.createStatement();
stmt.executeUpdate(query);
conn3.close();
continue;
}
//other building of interface in the while, omitted for clarity purpose
conn2.close();
rs2.close();
}
conn.close();
rs.close();
}
catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
錯誤是在如果(localDate.after(日期)){...} 其中stmt.executeUpdate(查詢);觸發錯誤並使程序崩潰。我認爲這裏的問題是,數據庫已經打開連接,無法處理conn3,但我需要while循環的其他連接,並且同時我需要能夠在if內部發出命令週期。我怎樣才能使新訂單不會干擾while循環,但同時執行查詢?
(什麼查詢試圖做可能不會在上面的代碼工作,這是一個大的方法類的一個片段)
感謝您的幫助!
顯示完整的堆棧跟蹤請 – Andremoniy
爲什麼你把'mysql'和'sql-server'標籤?你使用了什麼確切的數據庫? – Andremoniy
這是因爲你永遠不會關閉你的連接。爲此,請使用更好的數據結構。將結果集保存到地圖或數組中。或Usea更好的查詢爲此。 – Gatusko