2012-04-29 227 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

你的問題是什麼? – 2012-04-29 17:51:13

+0

@sixfeetsix如果這是共享數據庫連接的好方法。在做我自己的研究之後,只是尋找一些驗證。 –

回答

0

如果要創建數據庫,並呼籲在一些活動,那麼它會正常工作,但如果你想你的數據庫應當與服務一起運行那麼它始終是更好地編寫自定義內容供應商數據庫。

自定義內容提供商將幫助您與服務一起在後臺運行數據庫。

你可以從this link參考定製的內容提供商。

+0

那麼你是說我的解決方案不適用於'Service'或者'Custom Content Provider'是一個更好的解決方案嗎? –

+0

是的......如果您在後臺運行的數據庫使用自定義內容提供程序,它會更好... – Kri