在Android中读取未提交的事务

时间:2010-11-30 13:42:24

标签: java sql android database sqlite

我发生了数据库繁重的操作,它为我的数据库增加了大约10,000条记录。由于这可能需要很长时间,因此最好使用交易。

db.startTransaction();
....
do write operations.
....
db.setTransactionSuccessful();
db.endTransaction();

现在,我在事务中有一些读取操作,并且由于插入在endTransaction之前未提交,因此不会提取这些记录。我听说过一种称为事务隔离级别的东西,它使我们能够读取脏(未提交)记录。知道怎么做吗?

3 个答案:

答案 0 :(得分:3)

我建议调用SQLite的SQL语句pragma:

database.execSQL("PRAGMA read_uncommitted = true;");

此语句表示查询将使用事务隔离级别READ_UNCOMMITTED而不是READ_SERIALIZABLE(默认的SQLite模式)。

查找实例here

答案 1 :(得分:2)

你试过这个吗?

// outer transaction
db.startTransaction();
....

    //roll out a new transaction
    db.startTransaction();
    ....
    do write operations.
    ....
    db.setTransactionSuccessful();// <-- you do commint inside of this transaction

    // you can read data from here on from the previous committed transaction

....
db.setTransactionSuccessful();
db.endTransaction();

答案 2 :(得分:1)

我发现默认情况下您可以读取尚未提交的记录。如果您使用SQliteOpenHelper,则会失败。这是因为SQliteOpenHelper提供了2个单独的处理(读和写),未提交的写入将无法从另一个句柄读取。 因此,如果要读取未提交的记录,请使用SQLiteDatabase类。