2012-04-29 21 views
0

を共有私は、これはヘルパークラスを使用することによって、私の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とバックグラウンド)からデータベースを呼び出しているので、 "データベースがロックされています"という例外がスローされているので、これを行う必要があります。

+0

コンテンツプロバイダを作成するにはどうすればよいですか? –

+0

あなたの質問は何ですか? –

+0

@sixfeetsixこれがデータベース接続を共有する良い方法であれば。私自身の研究をした後、いくつかのバリデーションを探しています。 –

答えて

0

いくつかのアクティビティでデータベースと呼び出しを作成する場合は正常に動作しますが、データベースをサービスと一緒に実行する必要がある場合は、カスタムコンテンツプロバイダにデータベースを書き込む方が良い場合があります。

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

カスタムコンテンツプロバイダはthis linkから参照できます。

+0

私の解決策は 'サービス'や 'カスタムコンテンツプロバイダー'がより良い解決策では動作しないと言っていますか? –

+0

はい...バックグラウンドで実行しているデータベースにカスタムコンテンツプロバイダを使用する方がよいでしょう... – Kri