개발 가이드

Local Navigation

SQLite 데이터베이스 만들기/삭제하기

임시 또는 영구 데이터베이스를 만들 수 있습니다.

SQLite 데이터베이스 파일

SQLite 데이터베이스는 단일 파일로 저장됩니다. 데이터베이스 이름만 DatabaseFactory.create()에 매개 변수 값으로 지정하면 데이터베이스 파일이 외장 미디어 카드 저장소에 만들어집니다. 데이터베이스 파일의 기본 위치는 /SDCard/databases/application_name/입니다. 데이터베이스를 생성하는 프로그램의 이름은 이름 충돌을 피하기 위해 기본 경로에 포함되어 있습니다.

프로그램 저장 공간에는 SQLite 데이터베이스를 저장할 수 없습니다.

BlackBerry 단말기가 지원할 경우, 외장 미디어 카드 저장소가 데이터베이스의 우선 저장 위치입니다. 외장 미디어 카드 저장소를 지원하는 단말기에서는 경로 /SDcard/를 지정하여 외장 미디어 카드 저장소에 데이터베이스를 만들 수 있습니다.

프로그램이 SQLite 데이터베이스를 내장 미디어 저장소에 저장하도록 설계된 경우, 데이터베이스 저장 위치 변경에 따른 코드 수정이 용이하도록 프로그램을 구현해야 합니다. 내장 미디어 저장소를 지원하는 단말기에서는 경로 /store/를 지정하여 내장 미디어 저장소에 데이터베이스를 만들 수 있습니다.

프로그램이 제거될 때, 프로그램과 연결된 SQLite 데이터베이스는 자동으로 제거되지 않습니다.

기본 키 정보

SQLite 테이블의 각 행은 행 ID로 고유하게 식별됩니다. 행 ID는 행을 고유하게 식별하는 64비트의 부호 있는 정수입니다. 열 이름 대신 ROWID, OID 또는 _ROWID_ 이름을 사용하여 행 ID에 액세스할 수 있습니다. 이러한 이름은 명시적으로 선언된 열 이름으로 사용된 이름이 아니어야 합니다. 테이블에 INTEGER PRIMARY KEY라는 유형의 열이 있다면 해당 열의 이름이 행 ID에 대한 다른 별칭이 됩니다.

테이블에 동시에 삽입된 항목이 경우 올바른 행 ID가 반환되었는지 확인해야 합니다. INSERT 문을 실행하기 위해 executeInsert를 사용하는 경우 원시 코드에서 동기화가 처리되며 문제는 발생하지 않습니다. 그러나 executeInsert 이외의 메소드를 사용하여 INSERT 문을 실행하는 경우, INSERT 문을 실행하고 동기화된 블록 내에서 Database.lastInsertedRowID 메소드로 호출을 수행해야 합니다. 동기화된 블록에서는 다른 INSERT 문이 실행되지 않고 마지막에 삽입된 행 ID를 수정하지 못하도록 해야 합니다.

다른 쿼리에서 키로 사용할 정수 값을 검색하려면 Statement.getIntegersStatement.getLongs 메소드를 사용할 수 있습니다. 이 메소드는 정수 열 검색을 단순화하고 최적화합니다. 검색된 정수 값이 다른 테이블의 기본 키를 나타내는 것이 아닌 경우 이를 외래 키로 생각할 수 있습니다.

SQLite는 UNIQUE 또는 PRIMARY KEY 제한 사항이 있는 열에 대해 자동으로 색인을 만듭니다.

외래 키 제약 조건 적용

데이터베이스에서 외래 키를 사용하는 경우 DatabaseOptions 클래스에서 foreign_key_constraints 옵션을 설정하여 이를 사용하도록 적용할 수 있습니다.

데이터베이스를 생성할 때 foreign_key_constraints 옵션을 설정할 수 있습니다. 그러나 외래 키 제약 조건을 적용하기 위해서는 데이터베이스를 열 때마다 해당 옵션을 설정해야 합니다. 다음 코드 샘플은 데이터베이스를 열거나 만들 때 외래 키 제약 조건을 적용하는 방법을 보여 줍니다.

DatabaseOptions dbo = new DatabaseOptions();
dbo.set("foreign_key_constraints","on");
Database d = DatabaseFactory.openOrCreate("test.db", dbo);

외래 키 제약 조건이 DatabaseOptions.foreignKeyConstraintsOn 메소드로 적용되는지 여부를 확인할 수 있습니다.

문자 인코딩

SQLite 데이터베이스는 스트링을 내부에 UTF-8로 저장하지만 Java는 UTF-16으로 저장합니다. Database API에서 스트링 변환을 내부에서 처리하므로 인코딩이나 변환을 할 필요가 없습니다.

SQLite encoding pragma는 Database API에서 지원되지 않으므로 다른 인코딩을 설정할 수 없습니다. SQLite 데이터베이스에서는 UTF-8 지원 문자를 사용해야 합니다.

언어 데이터 정렬 사용

데이터베이스에 영어 이외의 텍스트 데이터가 포함된 경우 언어 데이터 정렬을 설정하여 SQLite에서 열을 정렬하고 올바르게 인덱싱할 수 있습니다. 열을 만드는 경우에는 COLLATE 연산자를 사용하여 이 작업을 수행할 수 있습니다.

기본 표준 데이터 정렬을 사용하면 일반적으로 사용하는 영어의 경우 좋은 결과를 얻을 수 있으며 널리 사용되는 다른 여러 언어에 대해서도 올바른 순서 정렬을 얻을 수 있습니다. 일부 라틴어와 중국어 및 일본어와 같은 표의 문자에 대해서는 올바른 결과를 얻지 못할 수도 있습니다.

기본 데이터 정렬 변경에 대한 자세한 내용은 www.unicode.org를 참조하십시오.

다음 코드 조각은 데이터베이스 d가 열려 있다고 가정하고 a라는 열에서 사용할 수 있는 프랑스어 데이터 정렬 테이블을 만듭니다.

d.executeStatement( "CREATE TABLE t1( a COLLATE french );" );

BlackBerry 프로그램에서는 다음 언어 데이터 정렬이 지원됩니다.

  • 표준(기본)

  • 남아프리카 공용어

  • 아랍어

  • 카탈로니아어

  • 체코어

  • 프랑스어

  • 히브리어

  • 중국어(홍콩)

  • 헝가리어

  • 일본어

  • 한국어

  • 핀인

  • 폴란드어

  • 루마니아어

  • 스페인어

  • 태국어

  • 터키어

  • 중국어(대만)


이 정보가 도움이 되었습니까? 의견을 보내 주십시오.