0

我需要一次在数据库中插入很多行,我正在寻找最有效的方法来做到这一点。我见过这样的代码:

db.beginTransaction();
for (ModelObject object : modelObjectsCollection){
    ContentValues values = new ContentValues();
    ... // fill values variable with values from object
    db.insert(TABLE_NAME, null, values);
    values.clear();
}
db.setTransactionSuccessful();

在这种情况下,所有插入都作为一个操作完成,花费的时间更少。如果我将单行的插入封装到这样的方法中,它是否仍然可以作为单个操作工作:

public void insertAllRows(){
    db.beginTransaction();
    for (ModelObject object : modelObjectsCollection){
        insertSingleRow(object);
    }
    db.setTransactionSuccessful();
}

public void insertSingleRow(ModelObject object){
    ContentValues values = new ContentValues();
    ... // fill values variable with values from object
    db.insert(TABLE_NAME, null, values);
}

是否也可以在单个事务中完成?此外,我不明白:如果我们不打电话是否正确?

db.beginTransaction(); ... db.setTransactionSuccessful();

显式地,但只调用 db.insert(),beginTransaction()-setTransactionSuccessful() 方法在 insert() 中被调用。相反,如果我们在 beginTransaction()-setTransactionSuccessful() 的调用之间调用 insert(),后两个方法不会在 insert() 内部调用?

4

1 回答 1

0

您完全可以在没有事务的情况下执行查询。并且根本不需要单个查询的事务。您还需要调用 db.endTransaction(); 在 db.setTransactionSuccessful() 提交之后。

更新:您可以在这里找到更多关于常见事务使用的信息http://www.4js.com/online_documentation/fjs-fgl-manual-html/User/Transactions.html例如。

于 2013-09-22T10:03:40.320 回答