copying database file from /assets to /data/data folder in file explorer - Android

前端 未结 1 1032
执笔经年
执笔经年 2021-01-28 12:51

I have issues in copying database file from /assets to /data/data folder in file explorer. I have searched this website, found many answers, but could not find the appropriate a

1条回答
  •  北恋
    北恋 (楼主)
    2021-01-28 13:56

    Try using below code to copy database from assets to data/data/package directory

    package com.example.myapp;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteException;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
          public class DataBaseHelper1 extends SQLiteOpenHelper{
          private static String DB_PATH = "/data/data/com.example.myapp/databases/";
    
          private static String DB_NAME = "myDB.sqlite";
    
          private SQLiteDatabase myDataBase;
    
          private final Context myContext;
    
          public DataBaseHelper1(Context context) 
          {
              super(context, DB_NAME, null, 1);
              this.myContext = context;
          }
    
          public void createDataBase() throws IOException{
    
    
        boolean dbExist = checkDataBase();
    
          if(dbExist)
          {
              Log.i("DB....", "database available....");
          }
          else
          {
              this.getWritableDatabase();
    
              try {
    
              copyDataBase();
    
              } catch (IOException e) {
    
              throw new Error("Error copying database");
    
              }
    
             Log.i("DB..", "database created.....");
           }   
    
          }
    
    
          public boolean checkDataBase(){
    
          SQLiteDatabase checkDB = null;
    
          try{
    
          String myPath = DB_PATH + DB_NAME;
    
          checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    
          }catch(SQLiteException e){
    
              Log.e("CheckDb","DB not found");
          //database does't exist yet.
    
          if(checkDB != null){
    
          checkDB.close();
    
          }
          }
          finally
          {
              if(checkDB != null){
    
                  checkDB.close();
    
                  } 
              this.close();
          }
          return checkDB != null ? true : false;
    
          }
    
    
    
    
          private void copyDataBase() throws IOException{
    
          InputStream myInput = myContext.getAssets().open(DB_NAME);
    
          String outFileName = DB_PATH + DB_NAME;
    
          OutputStream myOutput = new FileOutputStream(outFileName);
              byte[] buffer = new byte[1024];
    
          int length;
    
          while ((length = myInput.read(buffer))>0){
    
          myOutput.write(buffer, 0, length);
    
          }
    
          myOutput.flush();
    
          myOutput.close();
    
          myInput.close();
    
          }
    
          public SQLiteDatabase openDataBase() throws SQLException{
    
          String myPath = DB_PATH + DB_NAME;
    
          return myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    
          }
    
    
          @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) {
    
    
          }  
    
    
          public void getData()
          {
              SQLiteDatabase myDB ;
              Cursor cursor ;
               try {
    
                    myDB=this.openDataBase();                   
    
                        cursor=myDB.rawQuery("SELECT * FROM Country_Master",null);
    
    
                        if (cursor != null ) {
                           if  (cursor.moveToFirst()) {
                           do {
    
                               // put your code to get data from cursor                      
    
                           }while (cursor.moveToNext());
                           }
    
                        }
    
    
    
                       if(cursor != null)
                        {
                            myDB.close();
                           cursor.close();
                        }                      
                        }catch(SQLException sqle){
    
                        throw sqle;
    
                        }
    
    
            }
    }
    

    Also put this code under onCreate method in your activity where you want to copy database..

     DataBaseHelper1 myDbHelper = new DataBaseHelper1(MyActivity.this); 
         try 
         {
             myDbHelper.createDataBase();
         }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                }
    
         finally
         {
             myDbHelper.close();
         }
    

    0 讨论(0)
提交回复
热议问题