【发布时间】:2018-11-22 15:09:27
【问题描述】:
情况
我需要删除数据库中特定表的所有条目,所以我想我会删除它。
DROP TABLE IF EXISTS LogEntry
我尝试使用SQLiteDatabase#execSql(String) 和SQLiteDatabase#rawQuery(String, String[]) 运行sql。我在执行之前启动一个事务,并在使用SQLiteDatabase#beginTransaction() 和SQLiteDatabase#endTransaction() 执行它之后结束它。
问题
在这两种情况下,SQL 都在没有抛出异常的情况下执行,但表仍然存在。我在 drop 之后立即运行了一个 SELECT 语句以查看它是否有效,并且它的结果与 drop 之前相同。
【问题讨论】:
-
为什么不只是
delete from LogEntry。那么你不需要重新创建它 -
@juergend 这将是一种可能的解决方法,但是一旦桌子空了,我就不需要桌子了。我最感兴趣的是 drop 语句执行但没有任何效果的原因。
-
beginTransaction()必须在执行 SQL 命令之前调用。rawQuery()仅用于运行查询,而不用于运行命令。实际上是execSql(),而不是executeSql() -
您的交易具体在哪里?注意@MikeT 的回答中关于嵌套事务的引用 -
SQLiteOpenHelper生命周期回调已经在事务中运行。 -
@Basti 您更改了数据库版本?