Java-SQLite数据库在删除表

时间:2015-09-25 18:13:42

标签: java sql sqlite jdbc

我试图使用JDBC删除SQLite数据库表中的列。由于在SQLite中没有这样的功能,为了实现这一点,我使用了这种方法:

  1. 创建一个包含所有列但不包含要删除的列的新表(t1_backup
  2. 将所有数据(要删除的列除外)复制到新表
  3. 删除旧表(t1),
  4. 重命名新表格(t1_backup - > t1)。
  5. 实际代码如下:

    Connection cn = DriverManager.getConnection("jdbc:sqlite:"+path);
    Statement stmt = new Statement();
    stmt = cn.createConnection();
    stmt.execute("CREATE TABLE t1_backup(id);");
    stmt.executeUpdate("INSERT INTO t1_backup SELECT id FROM t1;");
    stmt.execute("DROP TABLE t1;");
    stmt.execute("ALTER TABLE t1_backup RENAME TO t1;");
    

    前两个语句执行没有问题。但是当执行DROP TABLE语句时,它给了我java.sql.SQLException: [SQLITE_LOCKED] A table in the database is locked (database table is locked)

    我找到了一个解决方案,但我不确定它为什么会起作用。解决方案是创建另外三个Statement对象,将它们连接到同一个数据库,并使用不同的Statement对象执行四个SQL语句中的每一个:

    stmt.execute("CREATE ...");
    stmt2.executeUpdate("INSERT ...");
    stmt3.execute("DROP ...");
    stmt4.execute("ALTER ...");
    

    可以解释一下吗?

    我正在使用的JDBC是Xerial的。

    谢谢。

0 个答案:

没有答案