Android(安卓)使用外部db数据库文件
16lz
2021-01-25
先简单说下步骤:
将格式为.db的数据库文件放到android项目assets目录中;
在程序必要的时候,将其“拷贝”(文件读取)到Android 程序默认的数据库存储目录中,一般路径为“/data/data/项目包名/databases/“;
自定义SQLiteOpenHelper类,创建一个名字跟步骤1中.db名称一样的数据库;
按照平常逻辑,增删改查数据库。
下面做下详细讲解:
步骤1:如下图,将数据库文件copy到assets目录中
步骤2:将db文件读取拷贝到databases目录中,代码如下:
package com.kinth.youdian.activity.boti.util;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import android.annotation.SuppressLint;import android.content.Context;/** * 将assets中的db文件拷贝到databases中 * @author Botision.Huang * @Date: 2015-8-18 下午4:11:24 * @Descp: TODO */public class DatabaseUtil { @SuppressLint("SdCardPath") public static void packDataBase(Context context){ // com.kinth.youdian 是程序的包名,请根据自己的程序调整 // /data/data/com.kinth.youdian/databases目录是准备放 SQLite 数据库的地方,也是 Android 程序默认的数据库存储目录 // 数据库名为 db_youdian.db String DB_PATH = "/data/data/com.kinth.youdian/databases/"; String DB_NAME = "db_youdian.db"; // 检查 SQLite 数据库文件是否存在 if (!(new File(DB_PATH + DB_NAME)).exists()) { // 如 SQLite 数据库文件不存在,再检查一下 database 目录是否存在 File f = new File(DB_PATH); // 如 database 目录不存在,新建该目录 if (!f.exists()) { f.mkdir(); } try { // 得到 assets 目录下我们实现准备好的 SQLite 数据库作为输入流 InputStream is = context.getAssets().open(DB_NAME); // 输出流,在指定路径下生成db文件 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(); } } }}
步骤3:代码如下
package com.kinth.youdian.activity.boti.dbdao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * 【省市区】数据库帮助类 * @author Botision.Huang * @Date: 2015-8-18 下午4:21:33 * @Descp: TODO */public class ProvinceDataHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "db_youdian.db"; private static final int DATABASE_VERSION = 1; /** Create a helper object for the Events database */ public ProvinceDataHelper(Context ctx) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) {} @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}
步骤4:做完以上3个步骤之后,下面我们就可以按照正常逻辑,去操作数据库啦,譬如下代码:
package com.kinth.youdian.activity.boti.dbdao;import java.util.ArrayList;import java.util.List;import com.kinth.youdian.activity.boti.dbdao.bean.ProvinceBean;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class ProvinceDao { private ProvinceDataHelper helper; private SQLiteDatabase db = null; public ProvinceDao(Context mContext){ helper = new ProvinceDataHelper(mContext); } /** * 从本地数据库获取省份列表 * @return */ public List getProvinceList(){ List proList = new ArrayList(); try{ db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from province", null); if(null != cursor){ while(cursor.moveToNext()){ int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); ProvinceBean bean = new ProvinceBean(); bean.setId(id); bean.setName(name); proList.add(bean); } } cursor.close(); }catch(Exception e){ e.printStackTrace(); }finally{ if(null != db){ db.close(); } } return proList; }}
最后,我们会问,那.db格式的数据库文件如何获取呢?如果你有.sql格式的数据库文件,可以利用Navicat Lite去获取得到.db格式的数据库文件。可以看下下篇文章。
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- 为x86进行android NDK程序开发要注意的问题
- Android(安卓)把个Excel 搞成sqlite数据库文件 并放在Assets里打
- Android文件下载之进度检测
- android sharedUserId sharedPreferences
- Android(安卓)使用 ios中的部分Emoji表情(也可以替换任意系统的em