共享数据库连接

时间:2012-04-29 17:47:34

标签: android sqlite locking thread-safety

我只需要进行一些验证,通过使用帮助程序类,这是一种在我的应用程序的SQLliteActivities之间共享Services数据库连接的可行方法:

public class DatabaseHelper
{
    private static DBItems dbItems;
    private static SQLiteDatabase sdbItemsRead, sbItemsWrite;

    public static synchronized DBItems getHelper(Context context)
    {
        if (dbItems == null)
            dbItems = new DBItems(context);

        return dbItems;
    }

    public static synchronized SQLiteDatabase select(Context context)
    {
        if (sdbItemsRead == null)
            sdbItemsRead = getHelper(context).getReadableDatabase();

        return sdbItemsRead;
    }

    public static synchronized SQLiteDatabase write(Context context)
    {
        if (sbItemsWrite == null)
            sbItemsWrite = getHelper(context).getWritableDatabase();

        return sbItemsWrite;
    }
}

在我的代码中,我将其称为选择数据:

DatabaseHelper.select(this).rawQuery("SELECT * FROM TABLE");

这就是写数据:

DatabaseHelper.write(this).update("tbl_items", cv, "[id] = ?", new String[] { itemId.toString() });

我需要这样做,因为我从不同的线程(UI和后台)调用数据库,并且我得到了“数据库被锁定”异常抛出。

1 个答案:

答案 0 :(得分:0)

如果您正在创建数据库并调用某些活动,那么它将正常工作,但如果您希望数据库与服务一起运行,那么最好在自定义Content Provider中编写数据库。

自定义内容提供商将帮助您在后台运行数据库以及服务。

您可以从this link推荐自定义内容提供商。