ヘルパー クラスを使用して、これが自分とアプリのSQLlite
間でデータベース接続を共有する実行可能な方法であることを確認する必要があります。Activities
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 とバックグラウンド) からデータベースを呼び出しており、「データベースがロックされています」という例外がスローされていたためです。