在与SQLITE3有关的Android应用程序中,
写完后需要阅读还是我们可以指望一次成功的交易?
更新以显示插入数据的功能:
clearerr()
答案 0 :(得分:2)
插入或任何单个操作会自动包含在事务中,因此将其包装在事务中没有任何好处。但是,如果您要在循环中进行多次插入,然后在循环之前开始事务,将其设置为成功,如果成功,则在循环之后,然后在循环之后结束事务,这样做会有所帮助。
除非您要捕获异常,否则几乎不需要使用 insertOrThrow ,因为 insert 方法实际上是INSERT或IGNORE,结果是插入行的rowid ,该值应为1或更大(在大多数正常情况下)。
column_name INTEGER PRIMARY KEY
或column_name INTEGER PRIMARY KEY AUTOINCREMENT
Rowid Tables定义的列来别名
使用:-
public long addM0(Store_M0_DataClass mStore_M0_DataClass)
{
// Create and/or open the database for writing
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_M0_ID, mStore_M0_DataClass.getM0_ID());
values.put(KEY_M0_IMAGE1, mStore_M0_DataClass.getM0_Image1());
values.put(KEY_M0_IMAGE2, mStore_M0_DataClass.getM0_Image2());
values.put(KEY_M0_ENABLE, mStore_M0_DataClass.getM0_Enable());
return db.insert(TABLE_M0, null, values);
}
但是,如果您想存储多个Store_M0_DataClass对象,则可以:-
public int addManyMo(Store_M0_DataClass[] mStore_M0_DataClasses) {
int rv = 0;
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();// <<<<<<<<<< wrap all inserts in a transaction
for (Store_M0_DataClass m0: mStore_M0_DataClasses) {
if(addM0(m0) > 0) {
rv++;
}
}
// Assumes OK if any inserts have worked, not if none have worked
if (rv > 0) {
db.setTransactionSuccessful();
}
db.endTransaction();
return rv; // Retruns the number of rows inserted
}
至:-
是写完后需要阅读还是我们可以指望一个 交易成功吗?
交易成功提交。提交有效地将数据写入磁盘,因此提交后无需执行任何操作。