Android 数据库打包发布

有些时候我们的软件用到SQLite数据库,这个时候怎么把一个做好的数据库打包进我们的APK呢,其实很简单,就是把我们的数据库文件放到我们的手机里,所以不必局限在哪个地方写这个代码,在第一次创建数据库的时候可以,我觉得在软件起动页里效果更好一点,首先我们应该把事先写好的数据库文件比如test.db放到res文件夹里的raw文件夹里,也可以放到assets里,因为这两个文件夹不会在生成APK的时候被压缩.

正常的应用数据库放在/data/data/包名/database/test.db,应用发布时,这个数据库不会随着应用一起发布,所以为了让我们已经准备好的数据正常使用,必须能实现数据库自身复制到数据库所在位置。


以下代码将实现assets/test.db下资源拷贝到/data/data/包名/database/test.db

private void copyDataBase() {
   String DATABASE_PATH = "/data/data/XXX/databases/";
   String dbName = "test.db";
   String dbFileName = DATABASE_PATH + dbName;
   boolean isDbExist = false ;
 
   SQLiteDatabase checkDB = null;
   try {
       checkDB = SQLiteDatabase.openDatabase(dbFileName, null,
       SQLiteDatabase.NO_LOCALIZED_COLLATORS);
   } catch (SQLiteException e) {
      Log.e("qt","SQLiteException !" + e.toString());
   } finally {
      if (checkDB != null) {
          isDbExist = true ;
          checkDB.close();
      }
   }
 
   //数据库不存在则拷贝
   if(!isDbExist){
       Log.e("qt"," db is NOT exist");
 
      File dir = new File(DATABASE_PATH);
      if (!dir.exists())// 判断数据库文件夹是否存在,不存在则新建
          dir.mkdir();
 
      FileOutputStream os = null;
      try {
          os = new FileOutputStream(dbFileName);//写入流
      } catch (FileNotFoundException e) {
          e.printStackTrace();
      }
 
      InputStream is = null;
      try {
          is = this.getAssets().open(dbName);
      } catch (IOException e1) {
          e1.printStackTrace();
      }
 
      byte[] buffer = new byte[8192];
      int count = 0;
      try {
         while ((count = is.read(buffer)) > 0) {
             os.write(buffer, 0, count);
             os.flush();
      }
      } catch (IOException e) {
          e.printStackTrace();
      }
 
      try {
          is.close();
          os.close();
      } catch (IOException e) {
          e.printStackTrace();
      }
    }
}

参考 http://www.androidlearner.net/android-database-publish-with-apk.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值