1. public class MyDB extends SQLiteOpenHelper {
  2. // 数据库的缺省路径
  3. private static String DB_PATH ;
  4. private static final String DB_NAME = "aa.db";
  5. private static final int DB_VERSION = 2;
  6. private SQLiteDatabase m_database;
  7. private final Context m_context;
  8. /**
  9. *
  10. * Constructor
  11. *
  12. * 保存传进来的context参数以用来访问应用的asset和raw文件。
  13. *
  14. * @param context
  15. */
  16. public MyDB(Context context) {
  17. super(context, DB_NAME, null, DB_VERSION);
  18. this.m_context = context;
  19. DB_PATH ="/data/data/"+context.getPackageName()+"/databases/";
  20. }
  21. public static MyDB openDatabaseReadOnly(Context context) {
  22. MyDB db = new MyDB(context);
  23. try {
  24. db.createDataBase();
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. db.openDataBase(SQLiteDatabase.OPEN_READONLY);
  29. return db;
  30. }
  31. public static MyDB openDatabaseReadWrite(Context context) {
  32. MyDB db = new MyDB(context);
  33. try {
  34. db.createDataBase();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. db.openDataBase(SQLiteDatabase.OPEN_READWRITE);
  39. return db;
  40. }
  41. /**
  42. *
  43. * 创建一个空数据库,用来存储你已有的数据库。
  44. */
  45. public void createDataBase() throws IOException {
  46. boolean dbExist = checkDataBase();
  47. if (dbExist) {
  48. // 如果你的数据库的版本改变了,调用这个方法确保在onUpgrade()被调用时
  49. // 传进去的是可写的数据库。
  50. SQLiteDatabase db = this.getWritableDatabase();
  51. if (db != null) {
  52. db.close();
  53. }
  54. }
  55. dbExist = checkDataBase();
  56. if (!dbExist) {
  57. try {
  58. // 调用这个方法以确保在缺省路径内产生一个空数据库,以便在其基础上复制我们已有的数据库。
  59. SQLiteDatabase db = this.getReadableDatabase();
  60. if (db != null) {
  61. db.close();
  62. }
  63. copyDataBase();
  64. } catch (IOException e) {
  65. Log.e("DB", e.getMessage());
  66. throw new Error("Error copyingdatabase");
  67. }
  68. }
  69. }
  70. /**
  71. *
  72. * 检查数据库是否已存在,以避免重复复制。
  73. *
  74. * @return true if it exists, false if itdoesn't
  75. */
  76. private static boolean checkDataBase() {
  77. SQLiteDatabase checkDB = null;
  78. try {
  79. String path = DB_PATH + DB_NAME;
  80. checkDB = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);
  81. }
  82. catch (SQLiteException e) {
  83. e.printStackTrace();
  84. }
  85. if (checkDB != null) {
  86. checkDB.close();
  87. }
  88. return checkDB != null ? true : false;
  89. }
  90. /**
  91. *
  92. * 把存在asset文件中的数据库复制的刚创建的空数据库中。
  93. *
  94. * */
  95. private void copyDataBase() throws IOException {
  96. // 刚创建的空数据库的路径
  97. String outFileName = DB_PATH + DB_NAME;
  98. // 打开空数据库
  99. OutputStream output = new FileOutputStream(outFileName);
  100. byte[] buffer = new byte[1024];
  101. // AssetManager assetMgr = m_context.getAssets();
  102. // 打开分解的asset文件
  103. // InputStream input = assetMgr.open(fn);
  104. InputStream input =m_context.getResources().openRawResource(R.raw.area);
  105. int length;
  106. while ((length = input.read(buffer)) !=-1) {
  107. output.write(buffer, 0, length);
  108. }
  109. input.close();
  110. output.flush();
  111. output.close();
  112. }
  113. /**
  114. *
  115. * 打开数据库。
  116. *
  117. * */
  118. private void openDataBase(int flags) throws SQLException {
  119.  
  120. String myPath = DB_PATH + DB_NAME;
  121. m_database = SQLiteDatabase.openDatabase(myPath, null, flags);
  122. }
  123. /**
  124. *
  125. * 关闭数据库。
  126. *
  127. * */
  128. @Override
  129. public synchronized void close() {
  130. if (m_database != null)
  131. m_database.close();
  132. super.close();
  133. }
  134. @Override
  135. public void onCreate(SQLiteDatabase db) {}
  136. /**
  137. *
  138. * 在数据库版本提高时,删除原有数据库。
  139. *
  140. * */
  141. @Override
  142. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  143. if (newVersion > oldVersion) {
  144. m_context.deleteDatabase(DB_NAME);
  145. }
  146. }
  147. }

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. 数据库行列转换sql

    经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换. 1.创建一张表 CREATE TABLE [android_source]( [CREATETIME] [d ...

  2. linux创建用户名密码等操作

    转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...

  3. sikuli 如何 清空文本框中的内容??解决方法!

    Screen s = new Screen(); s.click("name.png"); s.type("a",KeyModifier.CTRL); s.ty ...

  4. 线程同步之mutex和Semaphore

    表示之前对semaphore信号量木有神码概念. 比较纳闷这玩意要干嘛,好吧继续stackflow: Mutex can be released only by thread that had acq ...

  5. Python学习笔记(八)—— 使用dict和set

    一.dict 1.定义: Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 2.优势: di ...

  6. Vue.js 综合

    <!DOCTYPE HTML> <html> <head> <title>vue.js 处理用户输入</title> <script ...

  7. iOS 图标

    iOS icon是一件很头疼的事情 大致多少张呢,忘记了,下面开发者中心给的一个文档,自己捋捋有多少张 180934.jpg 幸亏不是自己画的,不然要骂姥姥,但是多数的UI是妹子啊,让人家做人家会说: ...

  8. 解决Clover在win 10下的兼容问题

    周五闲的蛋疼,把系统升级到win10.周一早上过来,发现Clover 无法使用了,各种崩溃,查阅了官网,发现Clover确实只兼容到win8.网络上给出解决方案的确是用qttabbar,qttabba ...

  9. javascript中 try catch finally 的使用

    例一:function message(){ try { adddlert("Welcome guest!") } catch(err) { txt="此页面存在一个错误 ...

  10. 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 ...