2017-02-21 1 views
2

나는 500 개 이상의 질의 응답을 저장 한 튜토리얼 앱을 개발했습니다. 은 즐겨 찾기라는 테이블이 하나 더 있습니다. 사용자 입력 용입니다. 이제 새로운 질문과 답변으로 앱을 업데이트하고 싶습니다. 하지만 즐겨 찾기 테이블의 데이터를 지우고 싶지 않습니다 (사용자가 즐겨 찾기에 몇 가지 질문을 표시 했으므로 해당 질문을 즐겨 찾기에서 지워서는 안 됨)SQLiteAssetHelper를 사용하여 데이터베이스 행을 새로운 행으로 업그레이드하는 방법

어떻게 할 수 있습니까? 때문에 데이터베이스 연결을 위해 SQLassethelper 라이브러리를 사용했습니다.


예전 DB에는 다음이 포함

  1. 데이터 테이블 (정적 테이블)
  2. 즐겨 찾기 테이블 (로컬 테이블)

때문에, sqliteassethelper 설명서에 따라 나는 나의 새로운 DB를 추가 : : 업데이트 된 데이터 테이블. 나는 여기에 삽입 된 즐겨 찾기 테이블을 삽입하지 않았다. 그것은 스크립트 파일에서 생성 될 것이다. 그리고 해당 데이터베이스를 assets >> databases 폴더에 저장합니다.

는 내가 스크립트

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"; 

그래서 내가 여기에 생각 즐겨 찾기 표는 이전 데이터로 생성됩니다 db.db_upgrade_1-2.sql 을 Fild입니다 만들었습니다. 하지만 프로젝트를 실행하면 다음과 같이 표시됩니다.

+1

에서 [SQLiteAssetHelper]의 섹션이있다가 (https://github.com/jgilfelt/android-sqlite-asset-helper) 업그레이드와 관련된 README. – PPartisan

+0

하지만 테이블을 변경하고 싶지 않습니다. 난 그냥 특정 테이블 –

+0

에 추가 데이터 (행)를 삽입하고 내가 readme 파일을 읽고, 그것은 테이블을 변경에 대한 정보가 포함되어 있습니다. –

답변

2

documentation 당신은 INSERT 또한 단지 표를 변경하지, 어떤 SQL 명령을 사용할 수 있지만,

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

하는 방법을 설명합니다.

자산 폴더에있는 데이터베이스 파일은 이전 데이터가없는 경우에만 사용됩니다 (앱을 처음 설치 한 경우). 이전 데이터가있는 경우 SQLiteAssetHelper 대신 SQL 업그레이드 스크립트가 실행됩니다.

SQLiteAssetHelper 프로젝트에는 이러한 스크립트의 모양을 나타내는 an example이 포함되어 있습니다.

데이터를 즐겨 찾기 테이블에 유지하려면 아무 것도 할 필요가 없습니다. 새 질문/답변을 추가하려면 일련의 INSERT 문을 사용하십시오. (해당 INSERT 문을 얻는 방법은 How to compare two SQLite databases을 참조하십시오.)

+0

은 100 개 이상의 새 질문 n 개가 있으면 100 개의 삽입 쿼리를 작성해야한다는 의미입니까? –

+0

아니, 지루한 작업이 컴퓨터에 맡기는 것이 좋습니다. 어떻게하는지 알고 싶다면 다른 질문이 될 것입니다. –

+0

나는이 방법을 시도했다 : >>> db.execSQL ("attach database? as old_db", new String [] {database_name_old}) ;. db.execSQL ("insert +"database_name_new + "즐겨 찾기"+ "select * from old_db.favourites"); –

0

마침내 질문에 대한 답변을 얻었습니다. 나는 SQLiteAssetHelper 라이브러리를 사용하고 있다고 말했다. 이제 새 레코드를 추가하고 업데이트 버전을 릴리스하려고합니다. 그래서 자산 폴더에 새롭게 업데이트 된 db를 저장할 수있는 기능을 찾고있었습니다. 이 라이브러리는 사용자의 전화에있는 오래된 DB를 업데이트합니다. 오래된 DB에 특정 테이블을 유지하고.

현재이 라이브러리는 그런 기능을 제공하지 않습니다. 업그레이드 스크립트는 변경 사항을 오래된 DB에서만 사용할 수 있습니다. 우리는 새로운 업데이트 된 db를 추가하고 새로운 데이터를 복사 할 수 있습니다.

새 데이터를 추가하고 로컬 데이터 테이블을 지우고 싶지 않으면. 그러면 해당 라이브러리의 설명서에 설명 된대로 업그레이드 스크립트에 삽입 쿼리를 작성해야합니다.

하지만 100 개의 검색어를 추가해야한다면 바로 가기가 없습니다. 업그레이드 스크립트에 100 개의 insert 문을 써야합니다.

및 경우에

는 는 여기에 대한 솔루션입니다 Y 다음 에 버전 X에서 전용 데이터베이스를 읽을 업그레이드 할 수 없습니다 우리는 게이트라는 오류가있는 경우 :

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

관련 문제