我是Android编程的新手,正在尝试了解最佳实践。
我想在两个不同的数据库表中进行多次插入,但作为一个事务(因为这两个表共享一个外键)。我希望我的函数返回一个结果,这样我就可以显示Toast,或者说发生了错误,否则我希望返回第一个insert的行ID。
我认为这样做的一种方法如下(免责声明:伪代码,可能无法编译!):
Long result = -1;
myDatabase.beginTransaction();
try {
// Insert into first table
ContentValue someValues = new ContentValues();
someValues.put("dbfield1", 1);
result = myDatabase.insert(DATABASE_TABLE_1, null, someValues);
if (-1 != result ) {
// Insert into second table
someValues.clear();
someValues.put("dbfield2", 2);
if( myDatabase.insert(DATABASE_TABLE_2, null, someValues) < 0 ) {
result = -1;
}
}
mDatabase.setTransactionSuccessful();
} catch(Exception e) {
// An error occurred
result = -1;
} finally {
mDatabase.endTransaction();
}有没有更简单/更好的方法来做到这一点?
发布于 2012-08-01 02:12:34
你可以在你的ContentProvider中重写bulkInsert,你的代码看起来不错。该方法应该返回插入的行值,但您可以对其进行自定义,以便只返回第一个ID。
public int bulkInsert(Uri uri, ContentValues[] values) {
Log.e("BULK", "Bulk insert started for URI" + uri.toString());
bulkSqlDB = database.getWritableDatabase();
int numInserted;
bulkSqlDB.beginTransaction();
try {
for (ContentValues cv : values) {
insert(uri, cv);
}
bulkSqlDB.setTransactionSuccessful();
numInserted = values.length;
} finally {
getContext().getContentResolver().notifyChange(uri, null);
bulkSqlDB.endTransaction();
}
return numInserted;
}https://stackoverflow.com/questions/11745705
复制相似问题