sqlite内置数据库文件

项目中经常需要提前预置数据库文件到app中,那么怎么预置和加载最好呢。

我们可以把db文件预置在raw中,读取流然后转存到sd卡上面,然后加载。那么为什么防止raw而不是asset中呢,因为这样我们直接可以通过资源id来获取这个资源的数据了转存十分方便。

//复制raw中的db文件到  data/data下面
 public static void copyAndLoadDB(Context context) throws Exception {

  File dir = new File("data/data/" + context.getPackageName() + "/databases");
  if (!dir.exists() || !dir.isDirectory()) {
   if (!dir.mkdir()) {
    throw new Exception("创建数据库文件失败!");
   }
  }

  File file = new File(dir, "province_city.db");
  if (!file.exists()) {
   try {
    InputStream is = context.getResources().openRawResource(R.raw.province_city);
    OutputStream os = new FileOutputStream(file);
    byte[] buffer = new byte[1024];
    int length;
    while ((length = is.read(buffer)) > 0) {
     os.write(buffer, 0, length);
    }
    os.close();
    is.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }

下一步获取data/data数据库实例就可以访问了


 /** 获取数据库 操作对象*/
 public static SQLiteDatabase getProvinceDB(Context context) {
  // SQLiteDatabase database = null;
  if (null == database) {
   File file = new File("data/data/" + context.getPackageName() + "/databases" + "/province_city.db");
   if (file.exists()) {
    database = SQLiteDatabase.openOrCreateDatabase(file, null);
   }
  }

  return database;
 }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容