2012-12-06 27 views
0

我正在使用Java的項目,在那裏,我必須在我的SQLite數據庫中進行修改。 我連接到它,工作得很好,除了這個奇怪的錯誤。對於特定查詢SQLite的'數據庫鎖定'奇怪的錯誤

s.executeUpdate("INSERT INTO STUDENTS VALUES('S0',11)"); 
... 
//many statements... including queries 
... 
String c2="INSERT INTO STUDENTS VALUES ('S1', 2)"; 
s.executeUpdate(c2); 
s.executeUpdate("DROP TABLE STUDENTS"); 

的發言s.executeUpdate("INSERT INTO STUDENTS VALUES('S0',11)");和完美s.executeUpdate(c2);跑行插入到數據庫中。但是當談到下面的陳述時,我得到了奇怪的數據庫鎖定錯誤。 當我改變查詢到另一個,它也工作得很好。當它到達結束語句時出現錯誤。更確切地說,上面所寫的所有查詢,即這裏的代碼的第一條語句都工作得很好。

請幫我找到bug。

+0

請不要投下來,不要閱讀我的問題。我知道Stack Overflow上有很多關於這種類型的帖子,但是我的帖子很奇特。它最終只顯示了一次例外情況,最後我也關閉了聲明和連接。 – Rajesh

+1

您是否開始了您沒有向我們展示的交易?我的猜測是,你不能刪除表,因爲更新正在鎖定它,等待提交。像drop這樣的DDL語句不是事務性的。 – Paolo

+0

@Paolo:在SQLite中,DDL語句也是事務性的。 –

回答

2

我猜「s」變量是一個Statement。執行後請嘗試關閉資源:

PreparedStatement updateStatement = connection.prepareStatement("INSERT INTO STUDENTS VALUES ('S1', 2)"); 
     try { 
      updateStatement.executeUpdate(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      updateStatement.close(); 
     } 

每次調用數據庫後都要這樣做。

+0

)它工作正常,我發現了這個bug,主要的錯誤是我調用了另一個方法,它在同一個數據庫上執行查詢,並忘記關閉那裏的語句和連接,非常感謝你的澄清。 – Rajesh