0

ヘルパー クラスを使用して、これが自分とアプリのSQLlite間でデータベース接続を共有する実行可能な方法であることを確認する必要があります。ActivitiesServices

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 とバックグラウンド) からデータベースを呼び出しており、「データベースがロックされています」という例外がスローされていたためです。

4

1 に答える 1

0

データベースを作成していくつかのアクティビティを呼び出す場合は問題なく動作しますが、データベースをサービスと一緒に実行する必要がある場合は、カスタム コンテンツ プロバイダーでデータベースを作成することをお勧めします。

カスタム コンテンツ プロバイダーは、サービスと共にデータベースをバックグラウンドで実行するのに役立ちます。

このリンクからカスタム コンテンツ プロバイダを参照できます。

于 2012-04-29T17:55:07.690 に答える