博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读取本地已有的.db数据库
阅读量:5860 次
发布时间:2019-06-19

本文共 3910 字,大约阅读时间需要 13 分钟。

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  @Override129  public synchronized void close() {130   if (m_database != null)131    m_database.close();132   super.close();133  }134  @Override135  public void onCreate(SQLiteDatabase db) {}136  /**137   * 138   * 在数据库版本提高时,删除原有数据库。139   * 140   * */141  @Override142  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://iirjx.baihongyu.com/

你可能感兴趣的文章
常见问题:阿里云服务器对外攻击解锁后怎么办?
查看>>
大数据开发—常见问题(1)
查看>>
《C语言及程序设计》实践参考——数组的排序
查看>>
Power9问世又怎样,一条SQL就把最牛小型机搞瘫了(有彩蛋)
查看>>
数据结构例程——最小生成树的普里姆算法
查看>>
java开发小细节分享
查看>>
MySQL 5.7.6: wl#5757 InnoDB支持大page
查看>>
MySQL中如何启用InnoDB数据引擎
查看>>
如果相关不意味着因果,那么意味着什么? ——大数据时代的“因果关系”思辨...
查看>>
[LeetCode] Top K Frequent Elements
查看>>
Linux内核调优之Sysctl研究(原创)
查看>>
天猫HTML5互动技术实践
查看>>
Java千百问_05面向对象(003)_java中抽象概念如何体现的
查看>>
阿里高级数据库专家何登成:AliSQL性能优化与功能突破的演进之路
查看>>
遇到问题时不要乱了方寸
查看>>
Duplicate Symbol链接错误的原因总结和解决方法[转]
查看>>
【转载】GIT 使用时遇到的行结束符设置问题
查看>>
用Swift实现一款天气预报APP(二)
查看>>
js错误处理与调试理论和办法
查看>>
[转载学习]Linux性能监控
查看>>