我试图使用JDBC删除SQLite数据库表中的列。由于在SQLite中没有这样的功能,为了实现这一点,我使用了这种方法:
t1_backup
)t1
),t1_backup
- > t1
)。实际代码如下:
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的。
谢谢。