Import SQLite database from sdcard in android - without asset folder

I am trying to import sqlite database from sdcard or any external location in my android app. My application requires importing the database, so the database schema will not change, but it will change the records according to the imported database.

(For example, I can import DatabaseA at a given time with 10 records, and at other times I can import DatabaseA with 25 records. DatabaseA is always imported from the same external location).

The import methods that I have seen so far using the resource folder do not help. I would like to import my database, which points to an external location.

+5
source share
2 answers

I used the following code to import my database from sdcard.

Please note: the database folder must be created inside the application in order to successfully import the database.

public void importDB() { String dir=Environment.getExternalStorageDirectory().getAbsolutePath(); File sd = new File(dir); File data = Environment.getDataDirectory(); FileChannel source = null; FileChannel destination = null; String backupDBPath = "/data/com.example.mine.move/databases/A.db"; String currentDBPath = "A.db"; File currentDB = new File(sd, currentDBPath); File backupDB = new File(data, backupDBPath); try { source = new FileInputStream(currentDB).getChannel(); destination = new FileOutputStream(backupDB).getChannel(); destination.transferFrom(source, 0, source.size()); source.close(); destination.close(); Toast.makeText(this, "Please wait", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } 

Also add the following permission.

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

If your import is unsuccessful, downgrade sdk or enable permissions at runtime.

+3
source

import database from external | internal directory:

 public class DataBaseHelper extends SQLiteOpenHelper { private static String DataBaseName = "dbname"; private static String DB_PATH = "" ; SQLiteDatabase database ; Context context ; public DataBaseHelper(Context context) { super(context, DataBaseName, null, 1); this.context =context ; String x = context.getDatabasePath("1").getPath() ; x = (String) x.subSequence(0 ,x.length()- 1); DB_PATH = x + DataBaseName ; if (checkExist()){ Log.e("DATA_BASE", " Exist"); }else{ try { createDataBase(); } catch (IOException e) { e.printStackTrace(); } } } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } boolean checkExist(){ boolean is = false ; try{ File file = new File(DB_PATH); if (file.exists()){ is= true ; } }catch (SQLiteException e){ Log.e("DATABESE_ERR" , e.getMessage() ) ; } return is ; } private void createDataBase() throws IOException{ if (checkExist()){ }else { getReadableDatabase() ; try{ copyDataBase(); }catch (IOException e){ Log.e("DATABASE-COPY-ERR", e.getMessage()); } } } private void copyDataBase()throws IOException { Uri fileUri = "your database file uri" ; File file = new File(fileUri.getPath()); FileInputStream inputStream = new FileInputStream(file); OutputStream outputStream = new FileOutputStream(DB_PATH); byte[] buffer = new byte[1024] ; int length =0 ; while( (length = inputStream.read(buffer) ) >0 ){ outputStream.write(buffer ,0 ,length); } outputStream.flush(); outputStream.close(); inputStream.close(); } public void openDataBase() throws SQLiteException{ database = SQLiteDatabase.openDatabase(DB_PATH ,null ,SQLiteDatabase.OPEN_READWRITE); } public void closeDataBase(){ if (database!= null){ database.close(); } try { super.clone() ; } catch (CloneNotSupportedException e) { e.printStackTrace(); } } 

}

how to use this class:

 public class DataBaseInterface { public DataBaseInterface(Context activity) { context = activity; } private void openDataBase() { try { dataBaseHelper = new DataBaseHelper(context); dataBaseHelper.openDataBase(); } catch (Exception e) { Log.e("DataBaseError", e.getMessage()); } } private void closeDataBase() { dataBaseHelper.close(); } } 

and an example of a database query method:

 public ArrayList<String> getSomeThing() { buffer = new ArrayList<>(); openDataBase(); query = "SELECT * FROM table_name"; cursor = dataBaseHelper.database.rawQuery(query, null); for (int i = 0; i < cursor.getCount(); i++) { cursor.moveToPosition(i); buffer.add(i, cursor.getString(0)); } closeDataBase(); cursor.close(); return buffer; } 
+1
source

All Articles