博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android -- sqlite数据库随apk发布
阅读量:5755 次
发布时间:2019-06-18

本文共 2135 字,大约阅读时间需要 7 分钟。

背景                                                                                           

把在工程中测试好的数据库信息碎apk一起发布,但是数据库不会自动安装,尤其里面内容很多的时候,不可能再去每个apk里面再写创建数据库,再写插入数据。

那么这样的话只能将写工程时候的数据库sqlite随apk一起发布了。

要点                                                                                            

  • 将随apk发布的数据库放在android工程下/res/raw路径下。
  • 数据库文件存到手机上时,路径在/data/data/包名/databases下,其他路径则会出错。

代码                                                                                            

public class TestSqlDatabase{        private static final String DATABASE_PATH = "/data/data/your.package.name/databases";    private static final int DATABASE_VERSION = 0;    private static final String DATABASE_NAME = "test.db";        private static String outFileName = DATABASE_PATH + "/" + DATABASE_NAME;        private Context context;   private SQLiteDatabase database;        public TestSqlDatabase(Context context) {        this.context = context;                File file = new File(outFileName);        if (file.exists()) {            database = SQLiteDatabase.openOrCreateDatabase(outFileName, null);            if (database.getVersion() != DATABASE_VERSION) {                database.close();                file.delete();                }        }        try {            buildDatabase();        } catch (Exception e) {            e.printStackTrace();        }            }    private void buildDatabase() throws Exception{        InputStream myInput = context.getResources().openRawResource(R.raw.test);        File file = new File(outFileName);                File dir = new File(DATABASE_PATH);        if (!dir.exists()) {            if (!dir.mkdir()) {                throw new Exception("创建失败");            }        }                if (!file.exists()) {                        try {                OutputStream myOutput = new FileOutputStream(outFileName);                                byte[] buffer = new byte[1024];                int length;                while ((length = myInput.read(buffer))>0){                    myOutput.write(buffer, 0, length);                }                myOutput.close();                myInput.close();            } catch (Exception e) {                e.printStackTrace();            }                }    }}

我是天王盖地虎的分割线                                                                 

这也就是一个IO流的控制,与《》有着异曲同工之妙。

《Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)》传送门:

 

 

本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3783176.html,如需转载请自行联系原作者

你可能感兴趣的文章
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
jQuery|元素遍历
查看>>
用 ThreadLocal 管理用户session
查看>>
setprecision后是要四舍五入吗?
查看>>
上云就是这么简单——阿里云10分钟快速入门
查看>>
MFC多线程的创建,包括工作线程和用户界面线程
查看>>
我的友情链接
查看>>
FreeNAS8 ISCSI target & initiator for linux/windows
查看>>
PostgreSQL数据库集群初始化
查看>>
++重载
查看>>
Rainbond 5.0.4版本发布-做最好用的云应用操作系统
查看>>
nodejs 完成mqtt服务端
查看>>
sql server 触发器
查看>>
[工具]前端自动化工具grunt+bower+yoman
查看>>