Android 拷贝数据库文件
做Android开发时,有时并不一定要创建数据库然后插入数据的过程。譬如,需要提供一个大数据量资源的搜索功能。像号码归属地,城市列表,ip归属地等。此时如果键数据库,再将数据一条一条insert到数据库中,不仅耗时,占用资源,有时还会导入错误。最好的方法是将数据库建好,数据insert好,并将该beifen.db文件放在raw(如果没有,在res目录下建一个)目录下。在创建数据库时,直接将该文件拷贝到databases目录下:
DATABASES_DIR="/data/data/yourpackagedir/databases", DATABASE_name="beifen.db"。详细见代码:
- public static synchronized CityDBHelper getInstance(Context context) {
- copyDatabaseFile(context, true);
- if(mDatabase == null){
- mDatabase = new CityDBHelper(context);
- }
- return mDatabase;
- }
- public static void copyDatabaseFile(Context context, boolean isfored) {
- Log.v(TAG, "--------------------------------copyDatabaseFile-");
- File dir = new File(DATABASES_DIR);
- if (!dir.exists() || isfored) {
- try {
- dir.mkdir();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- File dest = new File(dir, DATABASE_NAME);
- if(dest.exists() && !isfored){
- return ;
- }
- try {
- if(dest.exists()){
- dest.delete();
- }
- dest.createNewFile();
- InputStream in = context.getResources().openRawResource(R.raw.beifen);
- int size = in.available();
- byte buf[] = new byte[size];
- in.read(buf);
- in.close();
- FileOutputStream out = new FileOutputStream(dest);
- out.write(buf);
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
如果这样还不放心,可以在运行ContentProvider的query(一般拷贝数据库都是用于查询的)时,做一次拷贝检测
- copyDatabaseFile(context, false)
如果该文件没有,则拷贝,如果有,不拷贝
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20