【发布时间】:2023-03-03 11:14:01
【问题描述】:
我只需要验证一下,这是一种在我的应用程序的Activities 和Services 之间共享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