sqlite3
-
sqlite3 문자열을 숫자로 변환하여 비교하기sqlite3 2013. 12. 30. 12:14
sqlite> pragma table_info(delivery);0|key|varchar(65)|0||11|nick_src|varchar(65)|0||02|nick_tgt|varchar(65)|0||03|date_send|varchar(33)|0||04|date_recv|varchar(33)|0||05|item|varchar(33)|0||06|msg|varchar(81)|0||0 delivery.date_send 는 "20131201.1230" 형태의 문자열로 저장되어 있는 컬럼이다. 이것을 비교하여 쿼리하기 위해서는 CAST함수를 이용한다. sqlite> delete from delivery where CAST(date_send as integer) date_send(..
-
sqlite3 파일 사이즈 줄이기sqlite3 2013. 12. 30. 12:10
delete from [table] 로 레코드를 엄청나게 줄였음에도, 물리적 파일 사이즈는 줄어들지 않는다. 디스크 공간을 재사용하기 위해서인데, 이 경우 vacuum 명령어로 실제 파일 사이즈를 줄일수 있다. sqlite> vacuum;sqlite> .quit [biscuit@*****]$ ls -al sogon.db*-rw-rw-rw- 1 biscuit users 92,228,608 12월 30 12:05 sogon.db-rw-r--r-- 1 biscuit users 18,917,376 12월 30 12:05 sogon.db.test 필요없는 레코드들을 지우고나서도 92메가 정도였는데, vacuum 명령어 실행후 확 줄어들었다.
-
[sqlite3] transaction 이용한 퍼포먼스 향상sqlite3 2013. 6. 11. 16:57
그냥 보통 방법으로 INSERT와 DELETE등의 쿼리를 반복적으로 수행할때에 sqlite3의 성능은 형편없이 떨어지는데, 이럴때에는 Transaction을 이용해야 한다. 100개의 INSERT에 5초이상 걸리기도 하니 Transaction은 필수적이다. int TSqlite::ExecuteMulti(const list &queries){// beginsqlite3_exec(this->m_db, "BEGIN TRANSACTION;", 0, 0, 0); list::const_iterator ils = queries.begin();while(ils != queries.end()){sqlite3_exec(this->m_db, ils->c_str(), 0, 0, 0);ils++;} // endsqlite3_e..
-
[sqlite3] wrapper class in c++ and STL on linuxsqlite3 2013. 5. 24. 20:55
sqlite3에 대한 C++ wrapper class 를 만들어 보았다. 간단하게 INSERT와 SELECT 정도만 편하게 했으면 좋겠다 싶은데, sqlite라는게 그리 간단하지가 않다. (gdbm 정도의 편리함을 기대했다면 오산이다). db를 open하고 close하는 사이에 prepare하고 free, finalize 하는게 생각보다 까다롭다. 그래서 요것만 후다닥 구현. class TSqlite{protected :bool m_isError;sqlite3 *m_db; private :bool Send(const char *strQuery); public:TSqlite(const char *strFileName){m_isError = (sqlite3_open(strFileName, &m_db) == ..