SQLiteは、データベースサーバとしてではなくアプリケーションに組み込んで使用するDBMSで、データ件数が多いものには向かないが個人ベースのメールなど小規模なデータを扱う分には速度的にも問題ないレベルで動作します。
なお、ユーザ管理という概念もないためセキュリティを重視するようなデータや複数ユーザで共有したりという使い方も想定されていません。
いうなれば単一ファイルに対してSQL文でデータのSELECT、INSERT、DELETE、UPDATEができるプログラムだといえます。
SQLiteの入手
SQLiteは、SQLiteの公式ページからダウンロードして入手します。
- 公式ページの上部メニューバーにある「Download」をクリックしてダウンロードページを表示します。
- 「Precompiled Binaries For Windows」にある「sqlite-X_X_X.zip」をダウンロードします。2008/10/14現在であれば、X_X_Xは3_6_3つまりVer3.6.6が最新になります。zipファイルのサイズは234KBでした。
- zipファイルの中身をアプリケーションフォルダに展開します(といって、sqllite3.exeが1つですが)
sqlite3.exeはアプリケーションフォルダにいれてアプリケーションと一緒に配布するのが便利です。よって、手順3の時点でアプリケーションフォルダが存在しないときには、一次的なフォルダにおいておき、Visual Studioのプロジェクトでファイルを取り込み、更に[出力ディレクトリにコピー]プロパティを「常にコピーする」にして利用するといいでしょう。
SQLiteの実行(コマンドライン編)
SQLiteは、コマンドラインでsqlite3.exeを起動することでOracleでいうところのコマンドライン版SQL*Plusを起動したような状態になります。
D:\insqlite>sqllite3 test.db
SQLite version 3.6.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
サンプルテーブルの作成
D:\insqlite>sqllite3 test
SQLite version 3.6.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE EMP
...> (
...> EMPNO NUMBER(4,0) NOT NULL,
...> ENAME VARCHAR2(10),
...> JOB VARCHAR2(9),
...> MGR NUMBER(4,0),
...> HIREDATE DATE,
...> SAL NUMBER(7,2),
...> COMM NUMBER(7,2),
...> DEPTNO NUMBER(2,0),
...> PRIMARY KEY (EMPNO)
...> )
...> ;
sqlite>
なお、「...>」はSQLiteが自動的に継続行に付与するマークなので、入力時には不要です。
データの挿入
SQLiteのトランザクション制御は暗黙的トランザクション制御です。よって、トランザクションを明示的に開始しなければ自動的にCOMMITが実行されます。
D:\insqlite>sqllite3 test
sqlite> INSERT INTO EMP
...> (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
...> VALUES('1111','HATSUNE','CLERK',7902,'2008-01-30',800,NULL,'20');
sqlite> SELECT * FROM EMP;
1111|HATSUNE|CLERK|7902|2008-01-30|800||20
sqlite> COMMIT;
SQL error: cannot commit - no transaction is active
sqlite>
トランザクション制御
D:\insqlite>sqllite3 test
sqlite> BEGIN TRANSACTION;
sqlite> INSERT INTO EMP
...> (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
...> VALUES('1112','MIKU','CLERK',7902,'2009-09-30',800,NULL,'20');
sqlite> ROLLBACK;
sqlite> SELECT * FROM EMP;
1111|HATSUNE|CLERK|7902|2008-01-30|800||20
sqlite> BEGIN TRANSACTION;
sqlite> INSERT INTO EMP
...> (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
...> VALUES('1112','MIKU','CLERK',7902,'2009-09-30',800,NULL,'20');
sqlite> COMMIT;
sqlite> SELECT * FROM EMP;
1111|HATSUNE|CLERK|7902|2008-01-30|800||20
1112|MIKU|CLERK|7902|2009-09-30|800||20
sqlite>
終了する
D:\insqlite>sqllite3 test
sqlite> .quit
D:\bin\sqlite>
sqlite3.exeを起動時に指定したtest.dbというファイルができていると思います。終了しても、またこのファイルを指定してsqlite3.exeを起動すれば先ほどINSERTした3レコードを再びSELECT可能です。