【问题标题】:Sharing database connection共享数据库连接
【发布时间】:2023-03-03 11:14:01
【问题描述】:

我只需要验证一下,这是一种在我的应用程序的ActivitiesServices 之间共享SQLlite 数据库连接的可行方法,方法是使用帮助程序类:

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 和后台)调用数据库并且我收到了“数据库被锁定”的异常抛出。

【问题讨论】:

  • 您对编写内容提供者有何看法?
  • @sixfeetsix 如果这是共享数据库连接的好方法。只是在做我自己的研究后寻找一些验证。

标签: android sqlite locking thread-safety


【解决方案1】:

如果您正在创建数据库并调用某些活动,那么它会正常工作,但如果您希望您的数据库应该与服务一起运行,那么最好在自定义内容提供程序中编写数据库。

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

您可以参考this link 的自定义内容提供者。

【讨论】:

  • 那么您是说我的解决方案不适用于Service 还是Custom Content Provider 是更好的解决方案?
  • 是的...如果您为在后台运行的数据库使用自定义内容提供程序会更好...
猜你喜欢
  • 2013-04-21
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 2017-01-20
  • 2023-03-31
  • 1970-01-01
  • 2023-01-23
相关资源
最近更新 更多