2013-02-21 126 views
1

首先讓我們知道我是Android新手。使用ContentProvider處理數據庫操作是不是很好的做法?

  1. 使用ContentProvider處理數據庫表操作僅適用於一個應用程序是不是很好的做法?

  2. 試圖創建多個類來處理數據庫表操作。創建一個數據庫幫手如下:

    公共類WSDatabaseHelper擴展SQLiteOpenHelper {

    private static final String DATABASE_NAME = "wsemp"; 
        private static final int DATABASE_VERSION = 5; 
    
        public WSDatabaseHelper(Context context) { 
         super(context, DATABASE_NAME, null, DATABASE_VERSION); 
        } 
    
        @Override 
        public void onCreate(SQLiteDatabase database) { 
         ItemTable.onCreate(database); 
         CustomerTable.onCreate(database); 
        } 
    
        @Override 
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { 
         ItemTable.onUpgrade(database, oldVersion, newVersion); 
         CustomerTable.onUpgrade(database, oldVersion, newVersion); 
        } 
    } 
    

創建一個類來處理數據庫表操作:

public class CustomerBean { 
    private WSDatabaseHelper database; 

    @Override 
    public boolean onCreate() { 
     database = new WSDatabaseHelper(getContext()); 
     return false; 
    } 

public boolean insertObject(valObj) { 
    SQLiteDatabase db = database.getWritableDatabase(); 
    db.insert(CustomerTable.TABLE_CUST_ACCOUNT_INDEX, null, values); 
    } 
} 

但現在我不知道怎麼樣我可以從我的活動或會話文件中調用這個insertObject函數。我嘗試了CustomerBean.isnertObject(obj),但它要求將方法更改爲靜態。

+0

我不明白你想要做什麼。 customerbean在客戶方面是什麼?爲什麼@Override什麼時候沒有被覆蓋?你跟着什麼教程? – njzk2 2013-02-21 14:53:19

+0

我已經使用這個教程[vogella](http://www.vogella.com/articles/AndroidSQLite/article.html)。 CustomerTable僅包含create table語句和表字段的靜態名稱。忘記CustomerTable和@override。請僅讓我知道如何從Activity調用CustomerBean類的insertObject()方法? – ray 2013-02-21 15:12:15

+0

我不明白是什麼阻止你直接調用它? – njzk2 2013-02-21 15:39:46

回答

3

使用ContentProvider處理數據庫表操作僅適用於一個應用程序是不是很好的做法?

如果您的數據僅適用於您的應用程序,並且其他應用程序無法使用它,我看不到任何使用ContentProvider的理由。 ContentProvider用作將應用程序數據共享給其他應用程序的接口。如果您的數據可以共享或其他應用程序依賴於它,那麼您必須使用ContentProvider。

此外,您還可以爲您的內容提供者創建一組權限,以限制提供者中的某些操作。

+0

如果數據絕對必須是私人的,那麼使用ContentProvider沒有任何好處。它爲數據在後臺處理的方式增加了一層抽象,但這可以通過您自己的類來實現。 – DeeV 2013-02-21 14:53:17

+1

我想你可能會發現,即使你的數據完全是私有的,將它包裝在CP中也會更方便。一個很好的例子是使用SimpleCursorLoader比創建自己的AsyncTaskLoader工作子類容易得多。 – 2013-02-21 17:01:12

相關問題