Android SQLite:我应该只在insert查询中使用beginTransaction和endTransaction,还是同时在insert和read查询中使用?

Android SQLite:我应该只在insert查询中使用beginTransaction和endTransaction,还是同时在insert和read查询中使用?,android,sqlite,Android,Sqlite,ATM当我在android应用程序中写入SQLite时,我是这样做的: try { for (User user: users) { ContentValues values = new ContentValues(); databaseManager.database.beginTransaction(); values.put("user_name", user.getName()); values.put("user_

ATM当我在android应用程序中写入SQLite时,我是这样做的:

try {
    for (User user: users) {
        ContentValues values = new ContentValues();
        databaseManager.database.beginTransaction();
        values.put("user_name", user.getName());
        values.put("user_email", user.getEmail());
        databaseManager.database.insert("users", null, values);
    }
    databaseManager.database.setTransactionSuccessful();
} catch (Exception ex) {
    ex.printStackTrace();
} finally {
    databaseManager.database.endTransaction();
}
但当我从数据库中读取时,我不使用begin、setsuccessful和end:

Cursor cursor = databaseManager.database.rawQuery(SQLQueries.getUsers(), null);
if (cursor.moveToFirst()) {
    if (cursor!=null) {
        do {
            User user = new User();
            try {
                user.setName(cursor.getString(cursor.getColumnIndexOrThrow("user_name")));
                user.setEmail(cursor.getString(cursor.getColumnIndexOrThrow("user_email")));                        
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            users.add(user);
        } while (cursor.moveToNext());
    }
}

if (cursor != null && !cursor.isClosed()) {
    cursor.close();
    cursor = null;
}

我是否也应该将beginTransaction、setTransactionSuccessful和endTransaction添加到读取操作中?我很确定我不应该这样做,但我需要100%地做到这一点。

当您不使用显式事务时,SQLite会自动在每个语句周围包装一个事务

写入数据库时,每个
insert
/
update
/
delete
调用都是一条语句。 如果您正在执行多个这样的操作,那么可以使用事务来避免为每个操作支付事务开销

查询(
query
rawQuery
)是单个语句,即使它返回多行。 因此,围绕单个查询使用事务并没有任何区别。
(如果您有多个查询,您可以使用一个事务来确保它们的结果彼此一致,即使另一个线程试图更改它们之间的数据库。)

因此,如果我有多个读取,我应该将它们全部包装在一个开始/设置/结束事务中?这取决于您是否需要它们是原子的。此外,由于查询不会修改数据库内容,因此将其包含在事务中将毫无意义。因此,对命令使用事务,多个事务:它们是一起成功还是一起失败。