首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android数据库事务

Android数据库事务
EN

Stack Overflow用户
提问于 2012-08-01 01:25:45
回答 1查看 449关注 0票数 0

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

我想在两个不同的数据库表中进行多次插入,但作为一个事务(因为这两个表共享一个外键)。我希望我的函数返回一个结果,这样我就可以显示Toast,或者说发生了错误,否则我希望返回第一个insert的行ID。

我认为这样做的一种方法如下(免责声明:伪代码,可能无法编译!):

代码语言:javascript
复制
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();
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-01 02:12:34

你可以在你的ContentProvider中重写bulkInsert,你的代码看起来不错。该方法应该返回插入的行值,但您可以对其进行自定义,以便只返回第一个ID。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11745705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档