public class MyDB extends SQLiteOpenHelper {
// 数据库的缺省路径
private static String DB_PATH ;
private static final String DB_NAME = "aa.db";
private static final int DB_VERSION = 2;
private SQLiteDatabase m_database;
private final Context m_context;
/**
*
* Constructor
*
* 保存传进来的context参数以用来访问应用的asset和raw文件。
*
* @param context
*/
public MyDB(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.m_context = context;
DB_PATH ="/data/data/"+context.getPackageName()+"/databases/";
}
public static MyDB openDatabaseReadOnly(Context context) {
MyDB db = new MyDB(context);
try {
db.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
db.openDataBase(SQLiteDatabase.OPEN_READONLY);
return db;
}
public static MyDB openDatabaseReadWrite(Context context) {
MyDB db = new MyDB(context);
try {
db.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
db.openDataBase(SQLiteDatabase.OPEN_READWRITE);
return db;
}
/**
*
* 创建一个空数据库,用来存储你已有的数据库。
*/
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
// 如果你的数据库的版本改变了,调用这个方法确保在onUpgrade()被调用时
// 传进去的是可写的数据库。
SQLiteDatabase db = this.getWritableDatabase();
if (db != null) {
db.close();
}
}
dbExist = checkDataBase();
if (!dbExist) {
try {
// 调用这个方法以确保在缺省路径内产生一个空数据库,以便在其基础上复制我们已有的数据库。
SQLiteDatabase db = this.getReadableDatabase();
if (db != null) {
db.close();
}
copyDataBase();
} catch (IOException e) {
Log.e("DB", e.getMessage());
throw new Error("Error copyingdatabase");
}
}
}
/**
*
* 检查数据库是否已存在,以避免重复复制。
*
* @return true if it exists, false if itdoesn't
*/
private static boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
String path = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);
}
catch (SQLiteException e) {
e.printStackTrace();
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
/**
*
* 把存在asset文件中的数据库复制的刚创建的空数据库中。
*
* */
private void copyDataBase() throws IOException {
// 刚创建的空数据库的路径
String outFileName = DB_PATH + DB_NAME;
// 打开空数据库
OutputStream output = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
// AssetManager assetMgr = m_context.getAssets();
// 打开分解的asset文件
// InputStream input = assetMgr.open(fn);
InputStream input =m_context.getResources().openRawResource(R.raw.area);
int length;
while ((length = input.read(buffer)) !=-1) {
output.write(buffer, 0, length);
}
input.close();
output.flush();
output.close();
}
/**
*
* 打开数据库。
*
* */
private void openDataBase(int flags) throws SQLException { String myPath = DB_PATH + DB_NAME;
m_database = SQLiteDatabase.openDatabase(myPath, null, flags);
}
/**
*
* 关闭数据库。
*
* */
@Override
public synchronized void close() {
if (m_database != null)
m_database.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {}
/**
*
* 在数据库版本提高时,删除原有数据库。
*
* */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
m_context.deleteDatabase(DB_NAME);
}
}
}

String path = DB_PATH + DB_NAME;
   checkDB = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);

REFERENCES:http://www.apkbus.com/home.php?mod=space&uid=151485&do=blog&quickforward=1&id=53675

读取本地已有的.db数据库的更多相关文章

  1. AndroidStudio 中查看获取MD5和SHA1值以及如何查看手机应用信息以及读取*.db数据库里面数据

    查看获取MD5和SHA1值具体操作方式链接 查看获取MD5和SHA1值实际操作命令CMD语句: C:\Users\Administrator>cd .android C:\Users\Admin ...

  2. python 读取本地文件批量插入mysql

    Uin_phone.txt 本地文件内容 有1000条,这里只是展示前几条,供参考 133584752 133584759 133584764 133584773 133584775 13358477 ...

  3. APICloud框架—db数据库模块

    db数据库模块 db 模块封装了手机常用数据库 sqlite 的增删改查语句,可实现数据的本地存储,极大的简化了数据持久化问题,本模块已支持同步接口. 官方文档地址 打开/新建一个数据库 functi ...

  4. jmeter读取执行case插入DB生成报表和备份记录

    前言:由于通过jmeter写的接口自动化木有数据导入和统计分析功能,因此做了2次开发,目的是读取每条case获取接口名称和用例名称,通过获取的case执行结果进行计算,得到详细接口的用例通过率存入DB ...

  5. Maria DB数据库基础知识

    Maria DB连接 与MariaDB建立连接的一种方法是在命令提示符下使用mysql二进制文件. Maria DB命令行登录数据库服务: mysql -u root -p -- 换行输入密码 上面给 ...

  6. C#.NET ORM FreeSql 读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题

    前言 关于 Oracle US7ASCII 中文乱码的问题,Ado.Net 和 Odbc 无法解决.包括最新的.Net Core..NET6..NET7 都无法解决这个问题. FreeSql 对 Or ...

  7. 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型

    不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...

  8. 读取本地外网IP地址

    读取本地外网IP地址. 根据启动并运行的网卡名称,找到本机实际的IP地址(已知当前运行的无线网卡名包含某一个字符) import java.net.InterfaceAddress; import j ...

  9. window.open()读取本地图片简单使用总结

    最近做了一个项目,需要读取本地图片出来,问了一些人,感觉在数据库中存取路径比较合适,故做此方法. 后台查询出来的路径

随机推荐

  1. windows7下安装apache+PHP5.3

    Apache+PHP 安装与配置 最近在学习PHP,所以就在windows7下安装了PHP的开发环境.之所以没有选择集成的软件,如WAMP.AppServ等套件,是为了单独安装这些软件,有助于更加深入 ...

  2. 【laravel5.4】安装predis

    1.服务器先安装redis-server,这是毋庸置疑的!!! 2.服务器开启redis-server,配置相关参数 3.laravel执行 : $  yourPhpPath composer.pha ...

  3. Utils--封装好的下载图片的方法

    /** * 封装下载图片方法 * @param url 下载地址 * @param filename * @return 下载成功为true */ public boolean downfile(St ...

  4. IDEA安装使用 VisualVM 及VisualVM 远程监视

    1. VisualVM是什么 按照VisualVM官网(http://visualvm.github.io/)上的介绍,VisualVM是一个集成命令行JDK工具和轻量级分析功能的可视化工具.专为开发 ...

  5. MATLAB 求两个矩阵的 欧氏距离

    欧式距离定义: 欧式距离公式有如下几种表示方法: MATLAB 求两个矩阵的 欧氏距离 : 如果定义两个矩阵分别为a,b则定义c=(a-b).^2所求距离d=sqrt(sum(c(:)))

  6. Hibernate+maven+eclipse 实现自动建表

    一.需求 如题,当建好Model 时,不想自己手工建表,可以采取hibernate进行自动建表.下面将用一个小例子来说明如何将其实现. 二.实现 说明:1)这里用的是4.3.1.Final版本的hib ...

  7. Windows 7系统如何设置计划任务?

    Windows 7系统如何设置计划任务? 问题描述:Windows 7系统如何设置计划任务? 任务计划概述:任务计划,可以将任何脚本.程序或文档安排在某个时间运行.“任务计划”在每次启动windows ...

  8. linux 版本中 i386/i686/x86-64/pcc 等的区别

    在查看dpdk官方文档的时候,发现有 这样(kernel - devel.x86_64; kernel - devel.ppc64:glibc.i686)这样的安装包信息,收集了点资料来分析这三者的关 ...

  9. ANDROID开机动画分析

    开机动画文件:bootanimation.zip在system\media文件夹下动画是由系列图片连续刷屏实现的..bootanimation.zip文件是zip压缩文件,压缩方式要求是存储压缩,包含 ...

  10. Windows中"打开方式..."无法指定程序的解决办法

    Windows真DT, 今天升级了vim, 从vim73到vim74, 突然发现右键菜单打开方式中的VIM不见了, 于是手动重新指定到vim74\gvim.exe, 未果, Windows就直接忽略了 ...