我已經閱讀了大量關於將數據庫文件從資產或原始文件夾複製到/data/data/APP/databases
文件夾的帖子,但這會在設備上留下兩個數據庫副本佔用寶貴的空間。我正在考慮構建一個稍微小一點的解決方案,並允許更靈活的模式管理,方法是將數據庫SQL創建文本文件存儲在原始文件夾中,並使用DBhelper類中的標準on_create/on_update
進程。不過,我有點困惑,因爲複製數據庫的示例繞過on_create and on_update
方法。在Android上創建SQLite數據庫的最佳做法
這是推薦的方式,如果你不是從代碼中的字符串構建數據庫?
我的解決方案將通過將腳本全部放在一個文件中來模擬代碼方法中的運行腳本。我以這種方式構建數據庫的原因是,當應用程序完成時,我的數據庫將有近100個表,因此我需要該模式可以管理。
歡迎任何指導,因爲我仍然在學習Android的最佳實踐和模式。
這裏是我的代碼示例:
public class DatabaseHelper extends SQLiteOpenHelper {
private final String DATABASE_NAME = "mydb";
private final int DATABASE_VERSION = 1;
private final Context myCtx;
private String DATABASE_CREATE_SCRIPT = null;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
DATABASE_CREATE_SCRIPT = getLoadFile();
// Create all tables and populate the lookup tables
db.execSQL(DATABASE_CREATE_SCRIPT);
db.execSQL(VIEW_CREATE_V_PERSON);
}
private String getLoadFile(){
InputStream inputStream = myCtx.getResources().openRawResource(resIdofmyfile);
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder text = new StringBuilder();
try {
while ((line = buffreader.readLine()) != null) {
text.append(line);
text.append('\n');
}
} catch (IOException e) {
// We have an error to look up
return null;
}
return text.toString();
}
/**
* onUpgrade will check the version of the database and update the database
* if a newer version is available.
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Will set conditional upgrade checks
//Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which may destroy all old data");
db.execSQL("DROP TABLE IF EXISTS CONTEXT_LOAD");
db.execSQL("DROP TABLE IF EXISTS ISSUES");
db.execSQL("DROP TABLE IF EXISTS GOALS");
db.execSQL("DROP TABLE IF EXISTS PERSON");
db.execSQL("DROP VIEW IF EXISTS V_PERSON");
onCreate(db);
}
}
@MisterSpuonk是的,這是我的問題的主要焦點;我想從其他Android開發人員那裏瞭解一下這是否是一個好方法,因爲我對這個平臺比較陌生。 – ewjames 2012-01-11 11:34:21