zoukankan      html  css  js  c++  java
  • 读取本地已有的.db数据库

      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

  • 相关阅读:
    标准库中的生成器函数
    Python 数据分析5
    Chrome 开发者工具(三)------ Sources
    Chrome 开发者工具(二)------ Console
    Chrome 开发者工具 F12(一)
    jquery 获取自定义属性的值 data-*
    PHP 常用函数备忘
    Winsows 服务器,PHP 开发环境搭建
    FuelPHP 查看 Query SQL
    Laravel —— could not find driver
  • 原文地址:https://www.cnblogs.com/anee/p/3160964.html
Copyright © 2011-2022 走看看