Хранение и извлечение базы данных

#android

#Android

Вопрос:

Я хочу сохранить файл моей базы данных в папке drawable, а затем создать его резервную копию на SD-карте. Пытаясь это сделать, я нахожу проблему в том, какой путь указать для папки с возможностью рисования. Я делаю это:

попробуйте {

         File sd = Environment.getExternalStorageDirectory();

        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            //db = openOrCreateDatabase("demodatabase.sqlite",SQLiteDatabase.CREATE_IF_NECESSARY,null);
    currentDBPath = "//drawable//demodatabase.sqlite";



   db=openOrCreateDatabase(uri.toString(), 0, null);
        System.out.println("====="  currentDBPath);
        backupDBPath = "{demodatabase.sqlite}";

        File currentDB = new File(data,  currentDBPath);

        File backupDB = new File(sd, backupDBPath);

        if (currentDB.exists()) {

        FileChannel src = new FileInputStream(currentDB).getChannel();

        FileChannel dst = new FileOutputStream(backupDB).getChannel();

        dst.transferFrom(src, 0, src.size());

        src.close();

        dst.close();

        }

        } }catch (Exception e) {}
  

Заранее благодарю.

Ответ №1:

вы бы поместили такие файлы не в папку drawable, а в папку assets, и вы можете получить входной поток для этих файлов, просто используя

 context.getAssets().open("demodatabase.sqlite")
  

Комментарии:

1. я получаю исключение с нулевым указателем, контекст не принимает значения… почему так?]

2. Используете ли вы класс SQLiteOpenHelper в качестве суперкласса?

3. тогда вы можете просто использовать getAssets().open(«demodatabase.sqlite»), потому что само действие является контекстом

4. db=openOrCreateDatabase(uri.toString(), 0, null); как выглядит ваш uri? это должно быть просто имя базы данных, а не путь

5. просто то, что я сделал, это скопировал файлы из папки drawable на SD-карту