读取本地已有的.db数据库
- 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数据库的更多相关文章
- AndroidStudio 中查看获取MD5和SHA1值以及如何查看手机应用信息以及读取*.db数据库里面数据
查看获取MD5和SHA1值具体操作方式链接 查看获取MD5和SHA1值实际操作命令CMD语句: C:\Users\Administrator>cd .android C:\Users\Admin ...
- python 读取本地文件批量插入mysql
Uin_phone.txt 本地文件内容 有1000条,这里只是展示前几条,供参考 133584752 133584759 133584764 133584773 133584775 13358477 ...
- APICloud框架—db数据库模块
db数据库模块 db 模块封装了手机常用数据库 sqlite 的增删改查语句,可实现数据的本地存储,极大的简化了数据持久化问题,本模块已支持同步接口. 官方文档地址 打开/新建一个数据库 functi ...
- jmeter读取执行case插入DB生成报表和备份记录
前言:由于通过jmeter写的接口自动化木有数据导入和统计分析功能,因此做了2次开发,目的是读取每条case获取接口名称和用例名称,通过获取的case执行结果进行计算,得到详细接口的用例通过率存入DB ...
- Maria DB数据库基础知识
Maria DB连接 与MariaDB建立连接的一种方法是在命令提示符下使用mysql二进制文件. Maria DB命令行登录数据库服务: mysql -u root -p -- 换行输入密码 上面给 ...
- C#.NET ORM FreeSql 读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题
前言 关于 Oracle US7ASCII 中文乱码的问题,Ado.Net 和 Odbc 无法解决.包括最新的.Net Core..NET6..NET7 都无法解决这个问题. FreeSql 对 Or ...
- 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型
不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...
- 读取本地外网IP地址
读取本地外网IP地址. 根据启动并运行的网卡名称,找到本机实际的IP地址(已知当前运行的无线网卡名包含某一个字符) import java.net.InterfaceAddress; import j ...
- window.open()读取本地图片简单使用总结
最近做了一个项目,需要读取本地图片出来,问了一些人,感觉在数据库中存取路径比较合适,故做此方法. 后台查询出来的路径
随机推荐
- 数据库行列转换sql
经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换. 1.创建一张表 CREATE TABLE [android_source]( [CREATETIME] [d ...
- linux创建用户名密码等操作
转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...
- sikuli 如何 清空文本框中的内容??解决方法!
Screen s = new Screen(); s.click("name.png"); s.type("a",KeyModifier.CTRL); s.ty ...
- 线程同步之mutex和Semaphore
表示之前对semaphore信号量木有神码概念. 比较纳闷这玩意要干嘛,好吧继续stackflow: Mutex can be released only by thread that had acq ...
- Python学习笔记(八)—— 使用dict和set
一.dict 1.定义: Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 2.优势: di ...
- Vue.js 综合
<!DOCTYPE HTML> <html> <head> <title>vue.js 处理用户输入</title> <script ...
- iOS 图标
iOS icon是一件很头疼的事情 大致多少张呢,忘记了,下面开发者中心给的一个文档,自己捋捋有多少张 180934.jpg 幸亏不是自己画的,不然要骂姥姥,但是多数的UI是妹子啊,让人家做人家会说: ...
- 解决Clover在win 10下的兼容问题
周五闲的蛋疼,把系统升级到win10.周一早上过来,发现Clover 无法使用了,各种崩溃,查阅了官网,发现Clover确实只兼容到win8.网络上给出解决方案的确是用qttabbar,qttabba ...
- javascript中 try catch finally 的使用
例一:function message(){ try { adddlert("Welcome guest!") } catch(err) { txt="此页面存在一个错误 ...
- Oracle 12C -- Plug in a Non-CDB as a PDB
1.备份non-CDB数据库2.关闭non-CDB数据库 SQL> shutdown immediate; 3.将non-CDB至于只读状态 SQL> startup open read ...