копировать базу данных из базы данных в папку баз данных
В основном случае у меня есть этот метод, который копирует файлы из assets
в папку databases
:
try{ // CHECK IS EXISTS OR NOT SQLiteDatabase dbe = SQLiteDatabase.openDatabase("/data/data/com.henanet.dalel/databases/mydb.sqlite",null, 0); dbe.close(); // COPY IF NOT EXISTS AssetManager am = getApplicationContext().getAssets(); OutputStream os = new FileOutputStream("/data/data/com.henanet.dalel/databases/mydb.sqlite"); byte[] b = new byte[100]; int r; InputStream is = am.open("mydb.sqlite"); while ((r = is.read(b)) != -1) { os.write(b, 0, r); } is.close(); os.close(); } catch(Exception e) { }
Но как только пользователь устанавливает приложение, он получает эту ошибку в LogCat:
09-14 22:57:25.694: I/Database(19903): sqlite returned: error code = 14, msg = cannot open file at source line 25467 09-14 22:57:25.694: E/Database(19903): sqlite3_open_v2("/data/data/com.henanet.dalel/databases/mydb.sqlite", &handle, 2, NULL) failed
- Как сделать глубокую копию массива 2d в Java?
- NSMutableString как сохранить / скопировать
- Копирование вложенных списков в Python
- В чем разница между глубокой копией и мелкой копией?
- Сделать копию массива
- Понимание, когда data.table является ссылкой на (по сравнению с копией) другой data.table
- Как скопировать файл java.util.List в другой файл java.util.List
- Как скопировать объект в объекте c
- Как скопировать данные из одной таблицы в другую новую таблицу в MySQL?
- Стандартный сжатый способ копирования файла на Java?
- Копирование файлов из одного каталога в другой в Java
- C # Использование Reflection для копирования свойств базового classа
- Как вы копируете содержимое массива в std :: vector в C ++ без цикла?
Мой метод
Получите свой путь к базе данных, используя следующие
ContextWrapper cw =new ContextWrapper(getApplicationContext()); DB_PATH =cw.getFilesDir().getAbsolutePath()+ "/databases/"; //edited to databases
Тогда вы можете пойти так
private void copyDataBase() { Log.i("Database", "New database is being copied to device!"); byte[] buffer = new byte[1024]; OutputStream myOutput = null; int length; // Open your local db as the input stream InputStream myInput = null; try { myInput =myContext.getAssets().open(DB_NAME); // transfer bytes from the inputfile to the // outputfile myOutput =new FileOutputStream(DB_PATH+ DB_NAME); while((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.close(); myOutput.flush(); myInput.close(); Log.i("Database", "New database has been copied to device!"); } catch(IOException e) { e.printStackTrace(); } }