SQLiteStatement执行SELECT/INSERT/DELETE/UPDATE

Emi*_*yan 6 sqlite android android-sqlite

我正在使用已编译SQLiteStatement的事务来优化SQLite事务,但我正在阅读该execute函数的文档:

如果它不是SELECT/INSERT/DELETE/UPDATE,执行此SQL语句,例如CREATE/DROP表,视图,触发器,索引等.

这似乎意味着这个函数不应该与SELECT / INSERT / DELETE / UPDATE语句一起使用,但我有一个代码,它使用插入和工作.

我知道executeInsert和其他方法,但executeUpdateDelete在我的API级别不可用,所以我可以使用execute吗?

另外,如果我不需要最后一个插入ID或受影响的行数,我应该使用execute而不是executeInsert等等,换句话说,它是否更有效?

zap*_*apl 3

execute可能不会比 更快executeInsert,甚至可能更慢(在 ICSexecute调用上executeUpdateDelete并丢弃返回值)。您需要对此进行测试,但我怀疑您会在这里发现真正的差异。

executeAFAIK,如果您不需要返回值,那么使用它是安全的,但我不指望在未来的 Android 版本中保持这一点。文档说不,所以也许有人会改变行为来反映这一点。较旧的实现似乎也使用execute(例如2.1 delete()sourcecode)。例如,Jelly Bean在 SQLite 的幕后发生了很大的变化,但在使用时它应该仍然可以工作execute

此外,如果您SQLiteStatement在重新绑定参数时不一遍又一遍地使用相同的内容,那么可能不值得使用它。与实际的数据库访问和所需的磁盘 I/O 相比,每次调用常规insert、 、 ... 方法时构建一个新方法的速度都很快。update另一方面,事务有很大帮助,因为为每个语句同步磁盘上的数据库状态非常慢。