做開發(fā)的時候蛮寂,有些數(shù)據(jù)是本地生成的固定文件轧苫,需要存到sqlite數(shù)據(jù)庫中捆交。Android中sqlite一般是直接加載在‘data/data/應(yīng)用包名/databases’下焕蹄,所以外部數(shù)據(jù)庫文件一般先拷貝到該目錄下逾雄。
在拷貝數(shù)據(jù)庫過程中,一般做法是先判斷該db文件是否存在,不存在就拷貝一份過去嘲驾。但這樣存在一個問題淌哟,就是后邊更新了數(shù)據(jù)庫文件,得清緩存辽故,不然數(shù)據(jù)庫新添加數(shù)據(jù)沒法加載徒仓。那怎么辦呢?我最后把該文件存不存在改為判斷文件md5值誊垢,如果不一致掉弛,就拷貝。
復(fù)制過去后數(shù)據(jù)庫文件打開方式:
PinyinDataHelper mHelper = new PinyinDataHelper(context,DATABASE_NAME,null,DATABASE_VERSION);
SQLiteDatabase mDbPinyin = mHelper.getReadableDatabase();
這樣就得到了一個只讀的SQLiteDatabase喂走。一切就緒后殃饿,發(fā)現(xiàn)我的文件每次都拷貝,頓時蒙了芋肠。最后排查發(fā)現(xiàn)是復(fù)制過去后乎芳,打開該sql文件過程中,md5值不自覺的變了帖池。
那怎么辦呢奈惑?Android中通過SQLiteDatabase.openDatabase也可以打開數(shù)據(jù)庫文件,然后訪問睡汹。
SQLiteDatabase mDbPinyin = SQLiteDatabase.openDatabase(FileUtils.getDbFileName(context,DATABASE_NAME),
null, SQLiteDatabase.OPEN_READONLY);
注意:這里設(shè)置成SQLiteDatabase.OPEN_READWRITE也會改變md5值肴甸。