我正在做数据库同步。在 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/