2014-08-27 175 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,它保持连接打开,因为从数据库中调用一个空值导致错误。

它不是很明显,因为在例外框中没有代码。

愚蠢的小问题,所以人们总是犯一个错误抛出某种堆栈跟踪或警告。

谢谢