2017-02-21 32 views
2

Я разработал учебное приложение, в котором я сохранил более 500 вопросов и ответов. их еще одна таблица называется фаворитами. который предназначен для ввода пользователем. Теперь я хочу обновить приложение новыми вопросами и ответами. , но я не хочу стереть данные таблицы избранного (в случае, если пользователь отметил некоторые избранные вопросы, поэтому эти вопросы не следует удалять из избранных)Как обновить версию базы данных новыми строками с помощью SQLiteAssetHelper

так как я могу это сделать? , потому что я использовал библиотеку SQLassethelper для подключения к базе данных.


мой старый БД содержит:

  1. таблицы данных (статическая таблицу)
  2. избранных таблиц (локальную таблицу)

так, согласно sqliteassethelper документации я добавил свой новый дб : , который содержит: обновленную таблицу данных. Я не вставлял таблицу избранного здесь coz, она будет создана в файле сценария. и сохранил эту базу данных db в базе данных >>.

затем я создал скрипт FILD db.db_upgrade_1-2.sql

alter table "favourites" rename to "favourites_tmp"; 
create table "favourites" (
"id" Integer not null primary key autoincrement unique, 
"question" text, 
"answer" text, 
"category" text, 
"catid" integer 
); 
insert into "favourites" ("id","question","answer","category","catid") select from "favourites_tmp" "id","question","answer","category","catid" from "favourites_tmp"; 
drop table "favourites_tmp"; 

так я думаю, что здесь фаворитами будет создана таблица со старыми данными. , но , когда я запускаю проект, он говорит: нет таких табулированных фаворитов.

+1

Существует раздел в [SQLiteAssetHelper] (https://github.com/jgilfelt/android-sqlite-asset-helper) README касается обновлений. – PPartisan

+0

, но я не хочу менять таблицу. я просто хочу вставить больше данных (строк) в определенную таблицу –

+0

и прочитать файл readme, содержащий информацию об изменении таблицы. –

ответ

2

documentation говорит вам

create a text file containing all required SQL commands to upgrade the database from its previous version to it's current version.

Вы можете использовать любые команды SQL, а не только ALTER TABLE, но и INSERT.

Файл базы данных в папке с ресурсами используется только в том случае, если нет старых данных (если приложение установлено в первый раз). Если есть старые данные, SQLiteAssetHelper вместо этого выполняет скрипт обновления SQL.

Проект SQLiteAssetHelper содержит an example, который показывает, как выглядит такой скрипт.

Чтобы сохранить данные в таблице избранных, вам не нужно ничего делать. Чтобы добавить новый вопрос/ответы, используйте кучу инструкций INSERT. (Для получения этих инструкций INSERT см. How to compare two SQLite databases.)

+0

означает, что если у меня есть более 100 новых вопросов n ответов, тогда мне нужно написать 100 запросов на вставку в этот файл? –

+0

Нет, такие утомительные задачи лучше всего оставить на компьютере. Если вы хотите знать, как это будет другим вопросом. –

+0

Я пробовал этот метод: >>> db.execSQL ("attach database? Old_db", new String [] {database_name_old}) ;. db.execSQL ("insert into" + database_name_new + ". избранное" + "select * from old_db.favourites"); –

0

Наконец-то я получил ответ на свои вопросы. Как я уже сказал, я использую библиотеку SQLiteAssetHelper. , и теперь я хочу добавить новые записи и выпустить версию обновления. , поэтому я нашел функцию, с помощью которой я могу хранить новую обновленную базу данных в базе данных. и эта библиотека обновит старый db в телефоне пользователя. с сохранением определенной таблицы в старой db.

, но в настоящее время эта библиотека не предлагает такую ​​функцию. сценарий обновления можно использовать только для внесения изменений, это старый db. мы можем добавить новый обновленный db и скопировать данные из нового.

если мы хотим добавить новые данные, а также не хотим удалить локальную таблицу данных. , тогда нам нужно написать запросы вставки в сценарии обновления, как описано в документации к этой библиотеке.

, но если нам нужно добавить 100 запросов, то их нет для этого ярлыка. мы должны написать 100 вставных операторов в скрипте обновления.

и в случае, если ворота ошибки говоря не может обновить только для чтения базы данных с версией х к у, то здесь есть решение для этого:

SQLITE cant upgrade read-only database from version 1 to 2