0

我是 Android 编程新手,正在尝试了解最佳实践。

我想对两个不同的数据库表进行多次插入,但作为一个事务(因为表共享一个外键)。我希望我的函数返回一个结果,以便我可以显示一个 Toast 或其他内容来说明发生了错误,否则我想返回第一个插入的行 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();
}

有没有更简单/更好的方法来做到这一点?

4

1 回答 1

1

您可以在 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;
}
于 2012-07-31T18:12:33.783 回答