`
byebyegov5qq
  • 浏览: 1220147 次
文章分类
社区版块
存档分类
最新评论

android中实现sqlite打包到APK发布

 
阅读更多

网上能找到很多这样的sqlite数据库打包随android应用发布的文章,

但是最少有80%以上应该都是直接转出来的,根本没有尝试操作过,

我这两天也在做数据库的打包工作,

在网上寻觅了好几篇,大同小异,代码相当,

但是整整试了两天多,代码都不好使,在代码里面加了不少日志,

但是都出现异常,我把最新总结的代码贴出来,供需要的参考。

功能:

正常的应用数据库放在/data/data/包名/database/test.db,应用发布时,这个数据库不会随着应用一起发布,

所以为了让我们已经准备好的数据正常使用,必须能实现数据库自身复制到sd卡下面,

实现拷贝res/raw/test.db下资源拷贝到SD卡下的/mnt/sdcard/test/test.db

代码如下:

package zcping.syan.DBDefinition;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import zcping.syan.DragonBaby.R;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class ReleaseDataBaseActivity{
/** Called when the activity is first created. */
//SD卡下的目录
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath() + "/db_exam";
//数据库名
private final String DATABASE_FILENAME = "db_exam.db";
//这个context是必需的,没有context,怎么都不能实现数据库的拷贝操作;
private Context context;
//构造函数必需传入Context,数据库的操作都带有这个参数的传入
public ReleaseDataBaseActivity(Context ctx) {
this.context = ctx;
}

public SQLiteDatabase OpenDataBase() {
try {
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
//判断SD卡下是否存在存放数据库的目录,如果不存在,新建目录
if (!dir.exists()) {
dir.mkdir();
Log.i("ReleaseDataBaseActivity", "dir made:" + DATABASE_PATH);
} else {
Log.i("ReleaseDataBaseActivity", "dir exist:" + DATABASE_PATH);
}
try {
//如果数据库已经在SD卡的目录下存在,那么不需要重新创建,否则创建文件,并拷贝/res/raw下面的数据库文件
if (!(new File(databaseFilename)).exists()) {
Log.i("ReleaseDataBaseActivity", "file not exist:"
+ databaseFilename);
///res/raw数据库作为输出流
InputStream is = this.context.getResources().openRawResource(
R.raw.db_exam);
//测试用
int size = is.available();
Log.i( "ReleaseDataBaseActivity", "DATABASE_SIZE:" + 1 );
Log.i("ReleaseDataBaseActivity", "count:" + 0);
//用于存放数据库信息的数据流
FileOutputStream fos = new FileOutputStream(
databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
Log.i("ReleaseDataBaseActivity", "count:" + count);
//把数据写入SD卡目录下
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.flush();
fos.close();
is.close();
}
} catch (FileNotFoundException e) {
Log.e("Database", "File not found");
e.printStackTrace();
} catch (IOException e) {
Log.e("Database", "IO exception");
e.printStackTrace();
}
//实例化sd卡上得数据库,database作为返回值,是后面所有插入,删除,查询操作的借口。
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
databaseFilename, null);
return database;

} catch (Exception e) {
}
return null;
}
}

经过测试,绝对好使,希望对大家有帮助。

分享到:
评论

相关推荐

    Android打包APK Sqlite一起打包成APK

    最近在做项目,sqlite中有大量的手动存进去得数据,在打包成APK时候,发现,sqlite没有一起被打包过,现提供解决方案和demo的源码,希望对各位有用。

    Android应用开发之将SQLite和APK一起打包的方法

    主要介绍了Android应用开发之将SQLite和APK一起打包的方法,文章时间较早,尽管现在开发环境已大都迁移至Android Studio上,但打包原理依然相同,需要的朋友可以参考下

    Android 数据库打包随APK发布的实例代码

    有些时候我们的软件用到SQLite数据库,这个时候怎么把一个做好的数据库打包进我们的APK呢

    Android项目源码基于SQlite的学生管理系统

    本项目是一个基于安卓的学生管理系统项目源码,除了可以学习sqlite和布局啥用没有,适合新手学习。项目带了一个简单的论文,另外项目依赖...javaapk之前也介绍过类似的项目,可以在javaapk搜索“sqlite”就能找到更多。

    将db文件和apk一起打包

    本文讲解了如何将SQLite数据库(dictionary.db文件)与apk文件一起发布

    SQLite 安卓 libsqlite3.so 64位库

    SQLite安卓64位库,支持Unity打包发布,亲测可用。可解决arm64-v8a安卓机apk\abb数据读取与发布问题。

    基于AndroidStudio的体育新闻类型app项目源码

    项目介绍 本项目实现的是Android平台下的体育新闻类型app,名称叫做腾飞体育。实现的内容主要有进入app前展示应用的logo及名称的...该项目已打包,apk文件在app/release目录下,各位可以将其安装到Android手机上体验

    android开发资料大全

    在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 Android通过画线实现button效果 Android如何防止apk程序被反编译 Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 ...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    Android应用源码 - 基于安卓的个人隐私监控项目

    最后,签名验证模块实现了应用程序APK的签名验证,有效减少了二次打包应用对手机的威胁。另外为了保护隐私项目监控了发送短信、读取联系人数据、读取通话记录、获取您当前位置、获得IMEI号码、获得ROOT权限、监听...

    Google Android SDK开发范例大全(完整版)

    Android SDK 是作为一个 ZIP 文件发布的,可以将该文件解压到硬盘上的一个目录中。由于有多个 SDK 更新,建议有意识地组织开发环境,以便在不同的 SDK 安装之间轻松地切换。SDK 包括: android.jar Java 归档文件,...

    Android开发资料合集-World版!

    9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90、ANDROID-MARKET 使用 365 9.91、传感器 369 9.91.1、获取手机上的传感器 369 9.91.2、 371 9.92、时间类 372 * 获得日期或时间字符串 372 ...

    Android 开发技巧

    9.88、更换APK图标(签名打包) 348 9.89、利用ANDROID MARKET赚钱 363 9.90、ANDROID-MARKET 使用 365 9.91、传感器 369 9.91.1、获取手机上的传感器 369 9.91.2、 371 9.92、时间类 372 * 获得日期或时间字符串 372 ...

    cast-2015-2-android:Android培训课程-演员组(2015年第二学期)

    Android SQLite API HTTP协议 REST建筑风格 JSON格式 Android HTTP API 什么是材料设计? 主题 浮动标签 浮动动作按钮 回收者视图 卡视图 布局定制 定制视图 组件化 出版物[额外] APK导出 护卫队 Google Play...

    cast-2015-2-pic-android:2ºPIC Android-演员组(2015年第2学期)

    Android SQLite API HTTP协议 REST建筑风格 JSON格式 Android HTTP API 什么是材料设计? 主题 浮动标签 浮动动作按钮 回收者视图 卡视图 布局定制 定制视图 组件化 出版物[额外] APK导出 护卫队 Google Play...

    PIC_ANDROID_30_07

    Android SQLite API HTTP协议 REST建筑风格 JSON格式 Android HTTP API 什么是材料设计? 主题 浮动标签 浮动动作按钮 回收者视图 卡视图 布局定制 定制视图 组件化 出版物[额外] APK导出 护卫队 Google Play...

    fundamentos-android

    安卓基础课程旨在介绍和应用 Android 应用程序开发的基础知识。涵盖的主题什么是安卓? 软件层开发环境集成开发环境你好,世界!项目结构SDK管理器AVD经理活动活动生命周期操作视图列表视图适配器意图意图过滤器可...

Global site tag (gtag.js) - Google Analytics