android - Android 上的数据库多线程

标签 android multithreading database-connection

我正在尝试在 Android 上多线程使用一个 sqlite 数据库。 我有以下情况:

Activity A:它有 10 个使用 DB 的线程,但仅使用一个 SQLiteDatabase

Activity B:有 10 个使用 DB 的线程,但仅使用一个 SQLiteDatabase

(Activity的两个SQLiteDatabase对象不同)

逻辑执行如下:

  1. A 调用 B
  2. B 插入数据库并返回给 A
  3. A 显示结果
  4. A 尝试删除 B 插入的内容,但失败了。

A可以删除旧的东西,但是B刚刚插入的新对象失败,如果我重新启动应用程序,A可以删除以前不能删除的对象。 我应该为两个 Activity 使用相同的 SQLiteDatabase 吗?如果是这种情况,如何将此对象传递给 Activity B?

Activity A线程代码:

私有(private)类Delete_Task扩展了AsyncTask{

    private Context mContext;

    private DatabaseManager mDB;

    public DeleteEvent_Task(Context mContext,DatabaseManager DB) {
        this.mContext = mContext;
        this.mDB = DB;
    }

    @Override
    protected Void doInBackground(Long... params) {
        long id = params[0];

        this.mDB.delete(id);

        return null;
    }
}

Activity B线程代码:

私有(private)类 Update_Task 扩展 AsyncTask {

    private Context mContext;


    public Update_Task(Context mContext)
    {
        this.mContext = mContext;
    }

    @Override
    protected Void doInBackground(Event... params) {
        Object e = params[0];

        DatabaseManager DB = new DatabaseManager(this.mContext);

        if (e.getId() <= 0)
        {           
            DB.add(e);
        }
        else
        {

            DB.update(e.getId(), e);
        }
        DB.close();

        return null;
    }       
}

最佳答案

到目前为止,最简单的事情是在应用程序启动时打开一次数据库连接,并在整个代码中共享此连接,而无需关闭它。如果您使用单个连接,所有读取和写入都将被正确序列化,因此您无需担心。

关于android - Android 上的数据库多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333644/

相关文章:

php - PHP,线程和 curl

Android:有没有办法在应用程序上流式传输视频?

python - 队列消费者打印与日志记录

java - 如何通过 com.android.volley.Request 发送数组类型参数

java - 为什么这个Java小程序会让MacOS重启?

mysql - 远程连接到 clearDB heroku 数据库

sql-server - 如何通过代理服务器连接到SQL Server

sql-server - Windows 身份验证受信任的连接不起作用

android - 行触摸了 id 名称为 "Corona SDK"的 gotoScene

java - 简单的 HTML5 游戏无法在 Android WebView 中运行