Android sqlite回滚

Pir*_*aba 12 sqlite android

我正在做数据库同步.在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);
}
Run Code Online (Sandbox Code Playgroud)

请帮我.

提前致谢...

Jus*_*yul 39

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

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

请注意,重要的是你选择用抛出和异常替换"//你的sql东西"的任何方法.使用insertOrThrow()或者如果您需要更灵活的SQLiteStatement实例(它们的.execute方法总是会在出错时抛出异常).

请注意,您不需要显式回滚.如果在没有.setTransactionSuccessful()的情况下调用db.endTransaction(),它将自动回滚.

只记得在最后一次抛出SQLException方法之后总是把setTransactionSuccessful放到:)

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


Ras*_*sel 0

这次插入只影响一张表。所以通过检查变量n就可以知道是否插入了数据。两者之间没有任何关系。这里不需要任何事务。