实习新技能|将sqlite数据库与apk一起打包
原理:查了挺多资料,发现没有真正意义上的将sqlite和apk一起打包,这里通过将默认路径下的sqlite数据库复制到assets目录下,apk在首次打开的时候会判断sqlite的默认路径是否存在这个数据库,如果不存在,就将assets目录下的已经保存的数据库,通过IO流的形式复制到database路径下。1,将data/data/项目包名/database/下你的数据库复制到assets目录下;
·
原理:查了挺多资料,发现没有真正意义上的将sqlite和apk一起打包,这里通过将默认路径下的sqlite数据库复制到assets目录下,apk在首次打开的时候会判断sqlite的默认路径是否存在这个数据库,如果不存在,就将assets目录下的已经保存的数据库,通过IO流的形式复制到database路径下。
1,将data/data/项目包名/database/下你的数据库复制到assets目录下;
2,在app启动的时候判断在data/data/database/目录下存在你要的数据库,如果存在不进行复制,如果不存在,则进行io复制数据库文件,有个小坑,如果你后续是用默认在data/data/database目录下读取数据库的,一定要保证你用IO流写入的数据库在这个路径之下。(小心目录的路径前后都有斜杠)
String DB_PATH = "/data/data/com.siyusoulmate.mm/databases/";
String DB_NAME = "mm.db";
private void cloneData() {
// Log.e("TAG", "cloneData: ",new File(DB_PATH + DB_NAME)).exists() == false);
if ((new File(DB_PATH + DB_NAME)).exists() == false) {
Log.e("数据库是否存在", "cloneData: "+"不存在" );
// 如 SQLite 数据库文件不存在,再检查一下 database 目录是否存在
File f = new File(DB_PATH);
// 如 database 目录不存在,新建该目录
Log.e("目录路径", "cloneData: "+f );
if (!f.exists()) {
f.mkdir();
}
try {
// 得到 assets 目录下我们实现准备好的 SQLite 数据库作为输入流
InputStream is = getBaseContext().getAssets().open(DB_NAME);
// 输出流
OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);
// 文件写入
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
// 关闭文件流
os.flush();
os.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}else {
Log.e("数据库是否存在", "cloneData: 存在数据库");
Log.e("存在目录", "cloneData: "+(new File(DB_PATH + DB_NAME)).getAbsolutePath());
// /data/data/com.siyusoulmate.mm/databases/mm.db
}
}
3,之后便是正常的读取数据库了,跟你在database下读取的操作一样。
helper=new MyDatabaseHelper(this,"mm.db",null,1);
database=helper.getWritableDatabase();
Cursor cursor=database.query("T_MMCollection",new String[]{"TimeStamp","ParamValue","MeasureTime","DevType"},"UserID=? and ParamName=?",new String[]{String.valueOf(userId),"空腹"},null,null,"MeasureTime desc","1");
if(cursor.moveToFirst()){
do{
FBGValue=cursor.getInt(cursor.getColumnIndex("ParamValue"));
// Log.e(" bloodPressureFragment", "onClicked: systolicValue"+resultValue );
String meassureTime_FBG=cursor.getString(cursor.getColumnIndex("MeasureTime"));
measureDate_FBG=MyTimeUtils.timeMeassureToDate(meassureTime_FBG);
if(measureDate_FBG==null){
measureDate_FBG=MyTimeUtils.timeMeassureToDate_min(meassureTime_FBG);
}
devType_FBG=cursor.getInt(cursor.getColumnIndex("DevType"))==0?"(手动输入)":"自动输入";
}while (cursor.moveToNext());
}
cursor.close;
更多推荐
已为社区贡献2条内容
所有评论(0)