База данных не копируется в Android - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю базу данных при первом запуске моего приложения и также заполняю ее. Иногда мне нужно обновить базу данных из внешнего источника, поэтому мне нужно поместить ее в папку документов Android и получить оттуда. Итак, я копирую эту базу данных из папки «Документы» в базу данных приложений, используя приведенный ниже код. Используя отладчик, я могу завершить sh все приложение без ошибок, а также в журналах. Однако, как только я проверяю базу данных в самом приложении в «data / data / com.myApp.com / database / dbName.db», эта база данных не обновляется или база данных в папке «Документы» не копируется. Я также попытался поместить базу данных для копирования в папку "assets" приложения, но все равно не получил желаемого результата:

main_activity

DatabaseHelper db = new DatabaseHelper(getActivity().getApplicationContext());
db.copyDatabase();

DatabaseHelper

public void copyDatabase() {
    DB_FILE = context.getDatabasePath(DB_NAME);
    try {
        InputStream mInput = mContext.getAssets().open(DB_NAME);
        OutputStream mOutput = new FileOutputStream(DB_FILE);
        byte[] mBuffer = new byte[1024];
        int mLenth;
        while((mLenth = mInput.read(mBuffer)) > 0) {
            mOutput.write(mBuffer, 0, mLenth);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете создать пустую базу данных, а затем добавить в базу данных sh вашу базу данных в активы, как это реализовано в указанной ссылке :

public class DBHandler extends SQLiteOpenHelper {
protected static final String DATABASE_NAME_PRODUCTION = "productionComments.db";
private Context context;

public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory,
                     int version) {
        super(context, name, factory, DATABASE_VERSION);
        this.context = context;
    }

       //copy database from assets folder (.sqlite) file to an empty database
        public void copyDataBase() throws IOException{

        //Open your local db as the input stream
        InputStream myInput = context.getAssets().open("prod.db");

        // Path to the just created empty db
        String outFileName = "/data/data/com.qarun.qpcbeta/databases/"+DATABASE_NAME_PRODUCTION;

        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        //transfer bytes from the input file to the output file
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }

        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

ПРИМЕЧАНИЕ. : Вместо использования /data/data/com.qarun.qpcbeta/databases/ вы можете использовать getDatabasePath().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...