Import SQLite database from sdcard to android - Without Assets Folder
I used the following code to import my database from sdcard.
Please note: A database folder needs to be created inside the application for the database to be imported successfully.
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 not successful, downgrade your sdk version or include runtime permissions.
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(); } }}@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase) {}@Overridepublic 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 example method for querying database :
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;}