본문 바로가기

프로그래밍 놀이터/Database14

[SQLite] GLOB vs. LIKE [SQLite] GLOB vs. LIKE http://www.sqlite.org/lang_expr.html#like -LIKE operator 는 pattern matching 비교를 이용해서 비교를 한다.% 는 0 개 이상의 character 를 의미하고, _ 는 1개의 character 를 의미한다.ASCII 에 대해서는 대소문자는 가리지 않는다. 즉 i 과 I 를 동일하게 취급한다.그러나 ASCII 가 아닌 경우(unicode)에 대해서는 case sensitive 하다. -아래와 같은 PRAGMA 를 통해 case sensitive 로 만들 수 있다.PRAGMA case_sensitive_live = boolean; -GLOB 는 LIKE 와 비슷하지만 wildcard 로 Unix 의 globbi.. 2019. 1. 19.
[Database] -journal 파일의 정체는 뭘까? ( + WAL, temp files ) [Database] -journal 파일의 정체는 뭘까? ( + WAL, temp files ) http://gywn.net/2013/08/let-me-intorduce-sqlite/http://www.sqlite.org/tempfiles.html Journal --journal 은 rollback journal 이다.이는 SQLite 에서 atomic commit & rollback 을 지원하기 위한 임시 파일이다.-journal 의 파일명을 갖는다. rollback journal 은 보통 transaction 이 시작될 때 생성이 되고, 보통 transaction 이 commit 또는 rollback 으로 끝날 때 삭제된다. -보통 이 journal 파일은 SQLite DB 가 open 되었을 때, .. 2019. 1. 15.
[Sqlite] 1802 error 의 정체는? [Sqlite] 1802 error 의 정체는? https://sqlite.org/rescode.html#ioerr_fstat -Sqlite 의 1802 error 는 SQLITE_IOERR_FSTAT 이다.이는 SQLITE_IOERR 의 확장 에러 코드로 VFS layer 에서 fstat() 함수를 호출하면서 발생한 I/O 에러를 이야기한다. -VFS(Virtual File System) 는 무엇인가?http://aroundck.tistory.com/4925 간단히 이야기하면, SQLite 가 OS 와 communicate 하는 channel 이라고 보면 된다. -그럼 fstat 은 무엇인가?stat, lstat 등과 함께 fstat 은 아래와 같은 형태의 파일 정보를 읽어오는 함수이다. struct .. 2018. 12. 18.
[SQLite3] Appendix. SQLite3 커맨드 라인 도구, 관리도구 [SQLite3] Appendix. SQLite3 커맨드 라인 도구, 관리도구 이 글은 "빠르게 활용하는 모바일 데이터베이스 SQLite3” 이란 글을 보며 필요한 내용만 정리한 글입니다.자세한 내용은 책을 구매해서 보세요 1. 셸 모드 -SQLite3 의 셸 모드를 이용하면 윈도우의 명령 프롬프트나 리눅스의 셸과 같이 SQLite3 엔진과 대화식으로 명령어를 전달하고 그에 대한 결과를 받을 수 있다.셸 모드는 개발 과정에서 SQL 구문을 작성하거나 디버깅 과정에서 DB 내용을 확인할 때 가장 많이 사용된다. DB 생성 -SQLite3 은 기본적으로 DB 파일 하나에 테이블, 레코드, 인덱스, 설정 정보 등 모든 데이터를 저장한다. 아래 명령을 통해 DB 파일을 생성하면서 Shell 에 진입할 수 있다... 2018. 5. 26.
[SQLite3] 09. 안드로이드와 데이터베이스 [SQLite3] 09. 안드로이드와 데이터베이스 이 글은 "빠르게 활용하는 모바일 데이터베이스 SQLite3” 이란 글을 보며 필요한 내용만 정리한 글입니다.자세한 내용은 책을 구매해서 보세요 -안드로이드 플랫폼에서는 C 언어 기반의 SQLite3 lib 이 JNI 를 통해 제공되므로 SQLite3 C API 대신 안드로이드 플랫폼에서 제공하는 클래스와 메서드를 사용해야 한다. 1. DB 관련 클래스 DB 생성 -Context.openOrCreateDatabase() 메서드를 사용해 DB 를 만들 수 있다.DB 파일 이름, 권한, CursorFactory 를 인자로 전달한다.반환값은 SQLiteDatabase 객체이다. 권한 부분은 아래 옵션을 갖는다. MODE_PRIVATE : 해당 앱만 독점적으로 .. 2018. 5. 25.
[SQLite3] 06. 임베디드 SQLite3 최적화 #2 [SQLite3] 06. 임베디드 SQLite3 최적화 #2 이 글은 "빠르게 활용하는 모바일 데이터베이스 SQLite3” 이란 글을 보며 필요한 내용만 정리한 글입니다.자세한 내용은 책을 구매해서 보세요 5. 엄격한 자료형 검사 -SQLite3 자체는 동적 자료형 형태지만 typeof() 함수와 CHECK 제약조건을 이용해서 정적 자료형처럼 사용할 수 있다. ex)sqlite> CREATE TABLE testTable( name text CHECK(typeof(name)=‘text’), age integer CHECK(typeof(age)=‘integer’)); CHECK 규칙을 위반할 경우 constraint failed error 가 발생한다. 6. DB 갱신과 트랜잭션 -INSERT/UPDATE .. 2018. 5. 23.
[SQLite3] 06. 임베디드 SQLite3 최적화 #1 [SQLite3] 06. 임베디드 SQLite3 최적화 #1 이 글은 "빠르게 활용하는 모바일 데이터베이스 SQLite3” 이란 글을 보며 필요한 내용만 정리한 글입니다.자세한 내용은 책을 구매해서 보세요 -SQLite3 이 주로 임베디드 시스템에서 사용되기 때문에 다른 DBMS 와 다르게 단순히 질의 성능만을 우선시하기보다는 파일 크기, 메모리 사용량, 전원의 비정상적인 종료(Power failure) 와 같은 상황을 모두 고려해서 최적화해야 한다. 1. 실행 계획을 통한 질의 최적화 -개발 과정에서 SQL 문을 작성하고 수행해서 원하는 결과를 얻으면 즉시 앱에 적용하는 개발자들이 종종 있다.하지만 이렇게 작성된 SQL 문이 비록 동작은 정상적으로 하지만 나중에 성능상의 문제를 일으키는 경우가 많다. .. 2018. 5. 22.
[SQLite3] 05. SQLite3 C API 고급 [SQLite3] 05. SQLite3 C API 고급 이 글은 "빠르게 활용하는 모바일 데이터베이스 SQLite3” 이란 글을 보며 필요한 내용만 정리한 글입니다.자세한 내용은 책을 구매해서 보세요 1. 잠금 상태 확인 - sqlite3_busy_handler() -하나의 스레드나 프로세스에서 exclusive lock 을 걸고 있는 상태에서 다른 스레드나 프로세스가 잠금을 획득하려고 하면 에러가 발생한다.이 때 sqlite3_busy_handler() 함수를 이용하면 에러가 발생하지 않고 동기화를 진행할 수 있게 추가적인 처리를 위한 콜백 함수를 등록할 수 있다.int sqlite3_busy_handler(sqlite3*, int(*)(void*, int), void*); lock 을 잡을 수 없을 .. 2018. 5. 21.
[SQLite3] 04. SQLite3 C API 기초 [SQLite3] 04. SQLite3 C API 기초 이 글은 "빠르게 활용하는 모바일 데이터베이스 SQLite3” 이란 글을 보며 필요한 내용만 정리한 글입니다.자세한 내용은 책을 구매해서 보세요 1. 데이터베이스 연결 -SQLIte3 을 사용하려면 연결(connection)을 여는(open) 과정이 필요하다.이를 위해 제공되는 함수는 sqlite3_open() 이다.첫번째 인자는 db name, 두번째 인자는 출력인자로 db handle 을 전달한다.성공시 SQLITE_OK 가 그렇지 않으면 에러값이 발생한다. -연결을 닫는 함수는 sqlite3_close() 이다.인자로 입력인자로 db handle 을 넣는다.성공시 SQLITE_OK 가 그렇지 않으면 에러값이 발생한다. -sqlite3_errms.. 2018. 5. 20.