Mak*_*iev 15 sqlite android transactions
从数据库插入,查询,更新和删除项目时,我必须提供同步.据我所知beginTransaction(),这beginTransactionNonExclusive()是我需要的方法.
除了SQLite的文档描述EXCLUSIVE,IMMEDIATE以及DEFERRED相当不错.
交易可以是延期交货,即时交易或独家交易.延迟意味着在首次访问数据库之前,不会在数据库上获取锁.
如果事务是立即的,则只要执行BEGIN命令就会在所有数据库上获取RESERVED锁,而无需等待数据库的使用.在BEGIN IMMEDIATE之后,没有其他数据库连接可以写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE.但是,其他进程可以继续从数据库中读取.
独占事务导致在所有数据库上获取EXCLUSIVE锁.在BEGIN EXCLUSIVE之后,除了read_uncommitted连接之外,没有其他数据库连接能够读取数据库,没有异常的其他连接将无法写入数据库,直到事务完成.
当某些线程正在使用数据库时,它似乎提供了一些保护,防止不必要的插入和查询.但我不确定它是否能保证同步.
有insert我的方法ContentProvider.
@Override
public Uri insert(Uri baseUri, ContentValues values) {
    try {
        mDatabase = mHelper.getWritableDatabase();
        mDatabase.beginTransaction(); // EXCLUSIVE
        switch (sUriMatcher.match(baseUri)) {
        case UriCodes.COUNTRIES:
        case UriCodes.CONTINENTS:
        case UriCodes.ORGS:
            String table = baseUri.getLastPathSegment();
            long rowId = mDatabase.insert(table, null, values);
            Uri uri = Uri.withAppendedPath(baseUri, Long.toString(rowId));
            mDatabase.setTransactionSuccessful();
            return uri;
        default:
            mDatabase.endTransaction();
            throw new IllegalArgumentException(UNSUPPORTED_URI + SPACE + baseUri);
        }
    } finally {
        mDatabase.endTransaction();
    }
}
我没有任何问题,没有beginTransaction(),endTransaction()和setTransactionSuccessful()前.我真的需要添加它们吗?
小智 12
当然还有Android!如果您正在为可靠的数据操作工作,那么使用以下支持的方法很重要.
BeginTransaction();
SetTransactionSuccessful();
EndTransaction(); 
进一步看到这个... 在android中,在使用数据库时使用事务非常重要.
| 归档时间: | 
 | 
| 查看次数: | 32679 次 | 
| 最近记录: |