2014-08-27 146 views
0

我有一個問題,我似乎無法得到這個簡單的刪除命令工作。每次我運行它它只是鎖定數據庫和崩潰SQLite數據庫鎖定刪除命令

ID參數存在於數據庫 數據庫很小。只有幾張桌子。 更新命令工作得很好。

id是在一個和產生的命令是 - 在運行後DELETE from Employees where ID = 2;

public static void EmployeeDeleteByID(int idIn){ 

    Connection c = null; 
     Statement stmt = null; 
     try { 
      c = Connect(); 
      c.setAutoCommit(false); 
      System.out.println("Opened database successfully"); 

      stmt = c.createStatement(); 
      String sql = "DELETE from Employees where ID = " + idIn + ";"; 
      System.out.println(sql); 
      stmt.executeUpdate(sql); 
      c.commit(); 
      stmt.close(); 
      c.close(); 
     } catch (Exception e) { 
      System.err.println("Error 1 : " + e.getClass().getName() + ": " + e.getMessage()); 
      System.exit(0); 
     } 
     System.out.println("Operation done successfully"); 


} 

錯誤:java.sql.SQLException: database is locked

+1

所以你說它甚至不打印「打開的數據庫成功」? – Tim 2014-08-27 08:13:13

+0

yes它會正確打開數據庫,然後嘗試刪除命令。這是從控制檯打開的數據庫成功地 從員工刪除ID LIKE「2」; java.sql.SQLException:數據庫已鎖定。同樣的connect()方法也適用於正常工作的Update方法。 – user237462 2014-08-27 08:16:42

+0

似乎沒有工作,但生病再試。阿剛剛意識到了一些數據庫中的ID類型是整數,而不是int這是否有所作爲? ID也是一個獨特的索引。 – user237462 2014-08-27 08:19:28

回答

1

「數據庫被鎖定」指的是一些其它的連接仍具有活性的事務。

如果沒有其他進程訪問數據庫,則必須檢查程序中的所有連接;至少其中一人忘了commit()

+0

我從字面上開始打開程序,並縮小到這種方法。承諾應該在哪裏,或者我該如何管理?只有在此之前似乎運行的其他查詢是使用SQL Query創建JTable,但不鎖定數據庫。它使用delete命令進行鎖定。 – user237462 2014-08-27 08:25:57

+0

*某些*數據庫訪問正在鎖定數據庫。當你說只有一個,你找到了罪魁禍首。 – 2014-08-27 08:33:15

+0

我不認爲這是因爲,例如,如果我有程序打開,我可以運行更新命令罰款證明數據庫沒有通過顯示JTable鎖定。它是在原來的帖子100%這個代碼導致這個問題莫名其妙。 – user237462 2014-08-27 08:43:06

0

代碼實際上工作正常。

原來,另一個方法被調用來填充一個JCombo,它保持連接打開,因爲從數據庫中調用一個空值導致錯誤。

它不是很明顯,因爲在例外框中沒有代碼。

愚蠢的小問題,所以人們總是犯一個錯誤拋出某種堆棧跟蹤或警告。

謝謝