У меня есть требование в моем приложении для Android.
Уже существует база данных A, в которой есть таблица T. В следующем выпуске приложения я хочу создать новую базу данных B и ДВИГАТЬСЯ мою таблицу от A до B С УЧАСТИЕМ для всех существующих данных.
Я предполагаю, что есть способ получить дамп из существующей базы данных и сохранить его в файле ресурсов. А затем используйте этот файл для восстановления таблицы в новой базе данных.
Невозможно сохранить эти данные в памяти, так как они могут перейти в несогласованное состояние, если приложение будет убито между ними.
Я не могу найти какой-либо четко определенный способ сделать это, потратив некоторое время на поиск в документации / на форумах.
Пожалуйста помоги.
Извините, я не понимаю ваше требование. Вы хотите перенести все существующие данные из db A в db B?
@chaunv: не все существующие данные, только таблица от db A до db B.
Вы можете добиться этого с помощью команды ATTACH sqlite. Во-первых, указав путь к первой базе данных.
private static String FIRST_DB_PATH = context.getDatabasePath("Sample.sqlite").toString();
Затем вы прикрепляете его к secondDb
SQLiteDatabase secondDB = secondDBHandler.getWritableDatabase();
secondDB.execSQL("ATTACH DATABASE '" + FIRST_DB_PATH + "' AS tempDb");
Затем выполните запрос на вставку. ПРИМЕЧАНИЕ: Вы используете secondDB как основной
secondDB.execSQL("INSERT INTO main." + SeconDB_table_name + "SELECT * FROM tempDb."+ FirstDB_table_name );
Затем, наконец, отсоедините первый db
secondDB.execSQL("DETACH tempDb");
Надеюсь это поможет
Обновлено:
Сделайте это для сброса стола
secondDB.execSQL("DROP TABLE IF EXISTS main." + SeconDB_table_name);
Хорошо, вот как создать таблицу для secondDB как копию firstDb
secondDB.execSQL("CREATE TABLE main." + SeconDB_table_name + " AS SELECT * FROM tempDb." + FirstDB_table_name);
Если в комментарий вы имеете в виду отбросить первую таблицу после перемещения ее во вторую таблицу, а затем отбросить ее перед отсоединением
secondDB.execSQL("DROP TABLE IF EXISTS tempDb." + FirstDB_table_name);
попробую это. И мне нужно удалить эту таблицу из исходной базы данных. Где мне это делать? Я не могу поместить это непосредственно в onupgrade, так как он может быть вызван до того, как произойдет миграция
эй, я должен отбросить исходный стол, а не новый.
Вы имели в виду, что удалили первую таблицу DB? Зачем? ты предполагаешь это скопировать?
Не копировать, я хотел переместить. Извините, если я не был ясен вначале.
Проверить отредактированный ответ. Если у вас все еще есть проблема. Позвольте нам продолжить обсуждение в чате.
один из способов - записать записи в формате .txt, а затем перенести их в другой БД.