Android sqlite回滚

标签 android sqlite

我正在做数据库同步。在 sql server 和 sqlite 之间下载数据。如果在 sqlite 中更新/插入记录时出现某些情况,互联网连接速度慢或掉线,则需要回滚。在此代码中是否可能或如何在此处使用事务。

 public void insertTableRecords(String strTableName, String[] strToFields, String[] strValues){
    DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(DownlaodTableActivity.this);
    dbAdapter.openDataBase();
    ContentValues initialValues = new ContentValues();
    for(int i=0 ;i<strToFields.length;i++){
        initialValues.put(strToFields[i],strValues[i]);
    }
    long n = dbAdapter.insertRecordsInDB(strTableName, null, initialValues);
    System.out.println( " -- inserted status : --- " + n);
}

请帮帮我。

提前致谢...

最佳答案

下面是一个在 SQLite 中使用事务的简短示例(下面的 db 是一个 SQLiteDatabase 实例):

try {
    db.beginTransaction();
    // your sql stuff
    db.setTransactionSuccessful();
} catch(SQLException e) {
    // do some error handling
} finally {
   db.endTransaction();
}

请注意,无论您选择用抛出和异常替换“//your sql stuff”的方法,这一点很重要。使用 insertOrThrow() 或者如果您需要更灵活的 SQLiteStatement 实例(它们的 .execute 方法总是在出错时抛出异常)。

请注意,您不需要显式回滚。如果你调用 db.endTransaction() 而没有调用 .setTransactionSuccessful() 它会自动回滚。

请记住始终将 setTransactionSuccessful 放在最后一个 SQLException 抛出方法之后:)

您可以使用另一个 catch block 轻松扩展它,以捕获网络超时异常。

关于Android sqlite回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909221/

相关文章:

java - 在没有编辑文本的情况下捕获软键盘上完成的操作?

android - 如何在 ExoPlayer 2 中下载 ClearKey 加密视频

python - 如何在 Bluemix 上的 Spark 即服务中从 Python 笔记本读取存储在对象存储中的 SQLite 文件?

objective-c - 调用sqlite3_close以获取静态sqlite3 *句柄

android - 尝试执行简单查询,出现语法错误 : code 1 error at where clause.

android - 如何强制最大 CPU 使用率

java - 如何在同一个包中重用已经实现的方法?

ios - SQLite数据库文件存储在哪里?

android - 在布局层次结构中覆盖在 YouTubePlayerFragment 或 YouTubePlayerView 上方的 View 会导致播放立即暂停

sql - 仅在满足特定条件时才加入表