做开发的时候,有些数据是本地生成的固定文件,需要存到sqlite数据库中。Android中sqlite一般是直接加载在‘data/data/应用包名/databases’下,所以外部数据库文件一般先拷贝到该目录下。
在拷贝数据库过程中,一般做法是先判断该db文件是否存在,不存在就拷贝一份过去。但这样存在一个问题,就是后边更新了数据库文件,得清缓存,不然数据库新添加数据没法加载。那怎么办呢?我最后把该文件存不存在改为判断文件md5值,如果不一致,就拷贝。
复制过去后数据库文件打开方式:
PinyinDataHelper mHelper = new PinyinDataHelper(context,DATABASE_NAME,null,DATABASE_VERSION);
SQLiteDatabase mDbPinyin = mHelper.getReadableDatabase();
这样就得到了一个只读的SQLiteDatabase。一切就绪后,发现我的文件每次都拷贝,顿时蒙了。最后排查发现是复制过去后,打开该sql文件过程中,md5值不自觉的变了。
那怎么办呢?Android中通过SQLiteDatabase.openDatabase也可以打开数据库文件,然后访问。
SQLiteDatabase mDbPinyin = SQLiteDatabase.openDatabase(FileUtils.getDbFileName(context,DATABASE_NAME),
null, SQLiteDatabase.OPEN_READONLY);
注意:这里设置成SQLiteDatabase.OPEN_READWRITE也会改变md5值。