Android -- sqlite数据库随apk发布

简介:

背景                                                                                           

把在工程中测试好的数据库信息碎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)》有着异曲同工之妙。

《Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)》传送门:http://www.cnblogs.com/yydcdut/p/3744873.html

 

 




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

相关文章
|
16天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
115 15
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
45 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
44 4
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
70 3
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
100 2
|
3月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
230 1
|
2月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
53 0
|
3月前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
162 0
|
4月前
|
SQL 存储 小程序
【教程】navicat配合HTTP通道远程连接SQLite数据库
本文介绍了如何通过 Navicat Premium 工具配合 n_tunnel_sqlite.php 和 HTTP 通道远程连接服务器上的 SQLite 数据库。SQLite 是一种自给自足的、无服务器的 SQL 数据库引擎,由于其端口未对外开放,直接使用 Navicat 进行远程连接不可行。文章详细记录了使用 HTTP 通道实现远程连接的过程,包括定位本地 `ntunnel_sqlite.php` 文件,将其上传至服务器,并通过 Navicat 配置 HTTP 通道连接 SQLite 数据库的具体步骤。
232 0
【教程】navicat配合HTTP通道远程连接SQLite数据库