Я использую библиотеку Android SqliteAssetHelper (https://github.com/jgilfelt/android-sqlite-asset-helper) Я отправил свою базу данных с помощью этой библиотеки, и база данных содержит некоторые записи в таблице 1. Теперь я хочу обновить свое приложение новой базой данных с дополнительными записями, которые должны быть вставлены в ту, которую я уже отправил. Я не уверен, как именно написать сценарии SQL для обновления, поскольку схема одинакова для обеих баз данных. Кто-нибудь пробовал это?
Android SqliteAssetHelper - объединение таблиц базы данных из актива с существующей
Ответы (2)
После комментариев оператора в других ответах выяснилось, что есть две базы данных, которые нужно объединить. Оператор хочет знать, есть ли удобный способ объединить две базы данных вместе с библиотекой SQLiteAssetHelper.
К сожалению, нет прямого способа сделать это, потому что эта библиотека также использует тот же шаблон Android для запуска скрипта для изменения существующей базы данных.
Обходной путь состоит в том, чтобы преобразовать вторую базу данных (набор из 50 записей) в 50 операторов INSERT, которые будут помещены рядом с существующими 50. (В Интернете есть различные инструменты для упрощения этого шага, поэтому вам не нужно это делать. вручную.) Так что, пока бизнес-логика может работать с ними всеми вместе, они все могут войти в исходную таблицу, если схемы одинаковы; или, если вам нужно их разделить, все еще используйте 50 INSERT, но вместо этого используйте INSERT для другого имени таблицы.
Затем, когда у вас есть эти 50 операторов INSERT с данными 50 новых строк, поместите операторы в сценарий обновления, и вы сможете следовать стандартной библиотеке документация о том, как заставить этот скрипт работать через эту библиотеку.
Это можно сделать, используя sqldiff, чтобы найти различия между старой и новой БД.
Вы вызываете sqldiff для двух баз данных и передаете вывод в файл, который соответствует формату обновления SQL Asset Helper (т. е. <database_name>_upgrade_<from_version>-<to_version>.sql
).
Итак, все это будет sqldiff database.db database_new.db > database.db_upgrade_1-2.sql
Затем просто убедитесь, что файл .sql
находится в каталоге assets/databases
, и измените номера версий в вашем Java-коде (в примере с 1 на 2).
SQLiteAssetHelper
. Либо вы дублируете данные (имея их в новой версии базы данных для новых пользователей и в операторахINSERT
для существующих пользователей, получающих обновление), либо применяете те же операторыINSERT
для новых пользователей к исходному содержимому базы данных. ТеперьSQLiteAssetHelper
может предложить режим, в котором он куда-то копирует новую базу данных, и вы можете использоватьATTACH DATABASE
в своем сценарии обновления для доступа к ней, но я не думаю, что это поддерживается. - person CommonsWare   schedule 16.05.2016