본문 바로가기

Programming/android

안드로이드 복사한 데이터 베이스 사용하려면,


파일은 asset에 넣고, 복사하여 사용하면, 되지만, 


"android_metadata"라는 테이블이 없으면, 오류가 생긴다. Locale정보를 저장한다는.

http://developer.android.com/reference/java/util/Locale.html

* 데이터베이스를 열 때, 생성한 데이터베이스가 아닌 외부에서 만들어져서 복사된 데이터 베이스인 경우

android_metadata라는 테이블이 데이터베이스 마다 존재해야 하며, 해당 테이블에는 로케일과 관련된 정보가 저장된다. 다음과 같은 쿼리 둘을 실행시켜 테이블을 생성하고, 필드를 추가해야 한다.

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'ko_KR')

INSERT INTO "android_metadata" VALUES ('ko_KR')


- 위의 방법을 이용해서 테이블에 로케일을 지정해준 경우에는 setLocale() 메소드를 이용해 로케일을 변경해 줄 수 있다. 현재 안드로이드에서 지원하는 로케일의 종류에 대해서는 Locale 클래스를 참조:

http://developer.android.com/reference/java/util/Locale.html


* 그러나, 로케일 지정을 원하지 않는 경우, 데이터베이스를 SQLiteDatabase.openDatabase() 클래스 메소드를 이용하여 열 때 SQLiteDatabase.NO_LOCALIZED_COLLATORS 옵션을 추가해서 열어 주어야 한다.

SQLiteDatabase db = SQLiteDatabase.openDatabase(dbPath, null,

                  SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);


* 위 테이블이 존재하지 않는 경우 에러가 발생한다.


Note.

1. 솔직히 에러가 날 때도 있고 그렇지 않을 때 도 있었다. 불행하게도 이유는 찾지 못했다. 왜지?

2. SQLiteDatabase.NO_LOCALIZED_COLLATORS 를 추가해도 문제가 해결되지 않는 경우도 있다고 한다. 역시 이유는 알 수 없다.


'Programming > android' 카테고리의 다른 글

Android sqlCipher Proguard 오류시...  (0) 2012.07.20
sqlCipher  (2) 2012.07.17
안드로이드 단말별 해상도 정보  (0) 2012.05.30
android NDK 개발하기 설정.  (0) 2012.05.25
안드로이드 문자 보내기 (2)  (0) 2011.12.30