我应该总是在android sqlite中使用事务吗?
下面是一个简单的例子:我应该总是在android sqlite中使用事务吗?,android,sqlite,transactions,Android,Sqlite,Transactions,下面是一个简单的例子: public boolean containsId(Long userid) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from " + getTableName() + " where id = " + userid, null); boolean rows = cursor.getCount() > 0;
public boolean containsId(Long userid) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + getTableName() + " where id = " + userid, null);
boolean rows = cursor.getCount() > 0;
db.close();
return rows;
}
我以为sqlite会自动启动一个事务。我的同事说我必须总是开始交易
那么,正确的模式是什么?如果我从数据库读取数据,是否应该启动事务?我确信此时没有其他线程会在这个表中写入
除非在事务中,否则不能对数据库进行任何更改。
任何更改数据库的命令(基本上是任何SQL命令
选择以外的选项)将自动启动事务(如果
还没有生效。自动启动的事务是
在最后一个查询完成时提交
可以使用BEGIN命令手动启动事务。这样的
事务通常持续到下一次提交或回滚
指挥部。但是,如果数据库被激活,事务也将回滚
关闭,或者如果发生错误和回滚冲突解决方案
指定了算法
因此,是的,事务会自动启动。但是,如果执行多个查询而不手动启动事务,则会启动和完成多个事务,这会对性能产生负面影响。此外,自动回滚机制仅在单个查询失败时回滚该查询