嗯,這是一個關於Android SQL Lite數據庫的「最佳實踐」的問題。Android數據庫高級生命週期
我得到了我DBHandler
與所謂DBHelper
這樣一個內部類創建一個SQLiteDatabase
:
private final DBHelper dbhelper;
SQLiteDatabase db = dbhelper.getReadableDatabase();
// Call the helper
private static class DBHelper extends SQLiteOpenHelper {
DBHelper(Context context){
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
// create Table01
String sql = "create table " + "... SQL stuff here";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL("drop table if exists " + Table01);
onCreate(db);
}
}
另外,DBHandler
提供功能用於添加/檢索數據到/從象例如表這個:
public void insertOrIgnore(String table, ContentValues values){
SQLiteDatabase db = this.dbhelper.getWritableDatabase();
try{
db.insertOrThrow(table, null, values);
}
catch (SQLException e){
e.printStackTrace();
Log.e(TAG, e.toString());
}
finally {
db.close();
}
}
public Cursor getTable1(){
SQLiteDatabase db = dbhelper.getReadableDatabase();
Cursor cursor = db.query(Table1, null, null, null, null, null, TABEL_ID + " ASC");
return cursor;
}
當我需要從數據庫中的數據我創建一個DBHandler對象並使用它的方法。
因此,在第一次應用程序運行時,我調用insertOrIgnore方法並添加我想稍後使用的數據。 每當我對數據庫進行更改時,我需要卸載APP並重新安裝,以使更改生效。這很糟糕,所以我想用DB_VERSION來處理那些東西。在更改數據庫(模式或數據)之後,我將DB_VERSION ID更改爲更高的數字。
所以我的問題是:
- 如果newDBversion> oldDBversion,SQLiteDatabase不到風度使用的onCreate不過的onUpdate。這工作正常,但只有模式更新 ,它會導致空白表。我想知道最佳實踐,所以 之後onUpdate數據方法從DBHandler被再次調用。 請注意,DBHelper是內部類 DBHandler。
- 對於我的理解SQLiteDatabase onCreate方法是隻有調用如果數據庫不存在和onUpdate方法是 只有調用如果newDBversion> oldDBversion,是否正確?
- DBHandler必須是靜態的還是單身?還是沒有,因爲類自己處理多個讀/寫?
我開朗了更好的解決方案,但是從我在網上和一些Android的書中發現,那種將數據添加到SQL數據庫的就是它做的方式。但沒有人解釋如何更新數據(不是模式,每當dbversion發生變化時自動完成)
聖誕節後會看看它,感謝迄今和快樂hollidays! – masi 2011-12-24 12:43:25
好。因爲第一個問題對我來說是最重要的,所以我仍然不能按照我想要的方式工作:-( 一些實現示例會很好,但是我找不到任何好的。 – masi 2011-12-30 00:50:27
我已經爲第一個問題添加了提示。 – Yury 2011-12-30 07:17:22