实习新技能|将sqlite数据库与apk一起打包 您所在的位置:网站首页 apk文件存放在哪个目录中最好 实习新技能|将sqlite数据库与apk一起打包

实习新技能|将sqlite数据库与apk一起打包

2024-07-11 19:04| 来源: 网络整理| 查看: 265

原理:查了挺多资料,发现没有真正意义上的将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;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有