• 在android项目里使用自带的SQLite数据库


    好久没写博客了,因为项目需要,最近在研究android,使用android默认的访问sqlite的方法,访问的是:data/data/你的项目package/database/数据库名称 下的数据库,假如要在项目中打包db文件,该怎么弄呢?

    在网上看到一个老外的方法:

    publicclass DataBaseHelper extends SQLiteOpenHelper{

         
        //The Android's default system path of your application database.
        private static String DB_PATH = "/data/data/你的项目package/databases/";
     
        private static String DB_NAME = "数据库名称";
     
        private SQLiteDatabase myDataBase; 
     
        private final Context myContext;
     
        /**
         * Constructor
         * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
         * 
    @param context
         
    */
        public DataBaseHelper(Context context) {
     
            super(context, DB_NAME, null, 1);
            this.myContext = context;
        }    
     
      /**
         * Creates a empty database on the system and rewrites it with your own database.
         * 
    */
        public void createDataBase() throws IOException{
     
            boolean dbExist = checkDataBase();
     
            if(dbExist){
                //do nothing - database already exist
            }else{
     
                //By calling this method and empty database will be created into the default system path
                   
    //of your application so we are gonna be able to overwrite that database with our database.
                this.getReadableDatabase();
     
                try {
     
                    copyDataBase();
     
                } catch (IOException e) {
     
                    throw new Error("Error copying database");
     
                }
            }
     
        }
     
        /**
         * Check if the database already exist to avoid re-copying the file each time you open the application.
         * 
    @return true if it exists, false if it doesn't
         
    */
        private boolean checkDataBase(){
     
            SQLiteDatabase checkDB = null;
     
            try{
                String myPath = DB_PATH + DB_NAME;
                checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     
            }catch(SQLiteException e){
     
                //database does't exist yet.
     
            }
     
            if(checkDB != null){
     
                checkDB.close();
     
            }
     
            return checkDB != null ? true : false;
        }
     
        /**
         * Copies your database from your local assets-folder to the just created empty database in the
         * system folder, from where it can be accessed and handled.
         * This is done by transfering bytestream.
         * 
    */
        private void copyDataBase() throws IOException{
     
            //Open your local db as the input stream
            InputStream myInput = myContext.getAssets().open(DB_NAME);
     
            // Path to the just created empty db
            String outFileName = DB_PATH + DB_NAME;
     
            //Open the empty db as the output stream
            OutputStream myOutput = new FileOutputStream(outFileName);
     
            //transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer))>0){
                myOutput.write(buffer, 0, length);
            }
     
            //Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
     
        }
     
        public void openDataBase() throws SQLException{
     
            //Open the database
            String myPath = DB_PATH + DB_NAME;
            myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
     
        }
     
        @Override
        public synchronized void close() {
     
                if(myDataBase != null)
                    myDataBase.close();
     
                super.close();
     
        }
     
        @Override
        public void onCreate(SQLiteDatabase db) {
     
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     
        }
     
            // Add your public helper methods to access and get content from the database.
           
    // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
           
    // to you to create adapters for your views.
     


    下面就可以使用 该 类实现数据库的操作了

    DataBaseHelper myDbHelper = new DataBaseHelper(null);
             myDbHelper = new DataBaseHelper(this);
      
             try {
      
                     myDbHelper.createDataBase();
      
                 } catch (IOException ioe) {
      
                         throw new Error("Unable to create database");
      
                 }
      
             try {
      
                 myDbHelper.openDataBase();
      
             }catch(SQLException sqle){
      
                 throw sqle;
      

             } 

    实例化该类之后 就能在 data/data/your_project_package/database/ 文件夹下面看到 你的sqlite数据库文件了。 

  • 相关阅读:
    Java实现 LeetCode 437 路径总和 III(三)
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 435 无重叠区间
    Java实现 LeetCode 435 无重叠区间
    Makefile第一讲:一个简单的Makefile
    GCC常用参数
    GCC参数详解
    linux .o,.a,.so文件解析
  • 原文地址:https://www.cnblogs.com/strawer/p/2580114.html
Copyright © 2020-2023  润新知