ZendFramework入門・番外編1 SQLiteの導入2007年09月18日 03時06分07秒

Zend Framework入門でデータベースを扱ううえで、ターゲットのDBMSとしてSQLiteを使うつもりなので、「番外編」として、SQLiteコンソールアプリケーションの導入方法と簡単な使い方を説明しておきます。

ここではWindows環境での手順のみ示します。Linuxユーザの方は、ダウンロードするバイナリやパスを環境に合わせて読み替えてください。

入手

公式サイトのダウンロードページ(http://www.sqlite.org/download.html)から入手できます。

「Precompiled Binaries For Windows」セクションの「sqlite-3_4_2.zip」をダウンロードしてください。

※:2007.9.4に3.5.0がリリースされていますが、これは以前のバージョンと互換性がないとアナウンスされています。当然PHP5に標準添付のバージョンとも互換性がないため、3.4.xを使用するようにしてください。

参考:Moving From SQLite 3.4.2 to 3.5.0

インストール

ダウンロードしたアーカイブを解凍すると、中身は単独の実行可能ファイルが1つあるだけです。これをパスがとおっている場所(たとえばC:\WINDOWS)、または任意の場所に設置してください。任意の場所に設置した場合は、環境変数でパスを通すようにしてください。

動作確認

コマンドプロンプトを起動します。(この例はWindows2000の場合です)

Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\Documents and Settings\dara-j>

この状態でコマンド「sqlite3 -help」を入力します。
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\Documents and Settings\dara-j>sqlite3 -help
Usage: sqlite3 [OPTIONS] FILENAME [SQL]
FILENAME is the name of an SQLite database. A new database is created
if the file does not previously exist.
OPTIONS include:
   -init filename       read/process named file
   -echo                print commands before execution
   -[no]header          turn headers on or off
   -bail                stop after hitting an error
   -interactive         force interactive I/O
   -batch               force batch I/O
   -column              set output mode to 'column'
   -csv                 set output mode to 'csv'
   -html                set output mode to HTML
   -line                set output mode to 'line'
   -list                set output mode to 'list'
   -separator 'x'       set output field separator (|)
   -nullvalue 'text'    set text string for NULL values
   -version             show SQLite version

C:\Documents and Settings\dara-j>

このように、アプリケーションの説明が表示されればOKです。

コマンドが見つからない場合は環境変数をもう一度見直してください。

※:環境変数を設定したら、コマンドプロンプトを起動しなおしてください。

起動してみる

コマンドプロンプトから「sqlite3」と入力すると以下のように起動して入力待ち状態になります。

C:\Documents and Settings\dara-j>sqlite3
SQLite version 3.4.2
Enter “.help” for instructions
sqlite>

sqlite3.exeは、このようにコマンドラインベースの対話型アプリケーションで、このままSQLを発行して使用できます。

SQLを発行する以外にユーティリティコマンドも実装されていて、これらはすべて「.」(ピリオド)から始まります。 例えば、「.help」を入力すると、以下のようになります。

C:\Documents and Settings\dara-j>sqlite3
SQLite version 3.4.2
Enter ".help" for instructions
sqlite> .help
.bail ON|OFF           Stop after hitting an error.  Default OFF
.databases             List names and files of attached databases
.dump ?TABLE? …      Dump the database in an SQL text format
.echo ON|OFF           Turn command echo on or off
.exit                  Exit this program
.explain ON|OFF        Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF      Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.indices TABLE         Show names of all indices on TABLE
.load FILE ?ENTRY?     Load an extension library
.mode MODE ?TABLE?     Set output mode where MODE is one of:
                         csv      Comma-separated values
                         column   Left-aligned columns.  (See .width)
                         html     HTML <table> code
                         insert   SQL insert statements for TABLE
                         line     One value per line
                         list     Values delimited by .separator string
                         tabs     Tab-separated values
                         tcl      TCL list elements
.nullvalue STRING      Print STRING in place of NULL values
.output FILENAME       Send output to FILENAME
.output stdout         Send output to the screen
.prompt MAIN CONTINUE  Replace the standard prompts
.quit                  Exit this program
.read FILENAME         Execute SQL in FILENAME
.schema ?TABLE?        Show the CREATE statements
.separator STRING      Change separator used by output mode and .import
.show                  Show the current values for various settings
.tables ?PATTERN?      List names of tables matching a LIKE pattern
.timeout MS            Try opening locked tables for MS milliseconds
.width NUM NUM …     Set column widths for “column” mode
sqlite>
各ユーティリティコマンドの使い方はこちらなどが参考になるでしょう。

ところで、この状態では実はデータベースに接続していない(開いていない)状態なので、どんなクエリを発行してもまったく無意味です。なので、一旦終了させます。

.timeout MS            Try opening locked tables for MS milliseconds
.width NUM NUM ...     Set column widths for "column" mode
sqlite> .quit

C:\Documents and Settings\dara-j>

これでsqliteを終了しました。

新しいデータベースを開く

先の例では、コマンドライン引数をまったく与えずに起動しました。その結果、データベースを開いていない状態になりました。 今度は新しいデータベースを開いて起動してみることにします。

やり方は至極簡単、コマンドライン引数に存在しないファイル名を与えると、それをデータベースとして開きます。 ここでカレントディレクトリ(C:\Documents and Settings\dara-j)に「test.db」というデータベースを作成して開いてみます。

C:\Documents and Settings\dara-j>sqlite3 test.db
SQLite version 3.4.2
Enter “.help” for instructions
sqlite>

一見先ほどとなにも違っていないようですが、これでデータベースを開いていることになります。

まずはテスト用のテーブルを作成してみます。 ピリオドで始まるユーティリティコマンド以外の入力時は、最後に「;」(セミコロン)がつくまでは入力モードのままなので、普通に複数行入力できます。コマンドを確定させる場合に末尾にセミコロンを打ってからEnterしてください。

C:\Documents and Settings\dara-j>sqlite3 test.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> create table t_test(
   ...> id INTEGER PRIMARY KEY,
   ...> name VARCHAR(20),
   ...> regist TIMESTAMP DEFAULT CURRENT_TIMESTAMP
   ...> );
sqlite>
エラーが出ていなければテーブルが作成されているはずです。テーブル一覧は「.tables」コマンドで確認できます。
sqlite> .tables
t_test
sqlite>
先ほどCREATE TABLEした「t_test」が存在することが確認できました。

なお、上記のCREATE TABLEに関して、以下2点補足です。

  • 「id」列を「INTEGER PRIMARY KEY」指定しているので、これは暗黙でAUTO INCREMENT列になります。
  • 「regist」列はDEFAULT属性で「CURRENT_TIMESTAMP」を指定しています。
これらがあるため、テーブル「t_test」に対しては
sqlite> INSERT INTO t_test ( name ) VALUES ( 'test' );
のみで新しいレコードが挿入されます。

「INTEGER PRIMARY KEY」指定で暗黙のAUTO INCREMENT列にするのは、SQLiteでは定番ですので、ぜひ覚えておいてください。

外部SQLコマンドの実行

サンプルコードは示しませんが、「.read」ユーティリティコマンドで外部のSQLファイルを読み込んで実行できます。

たとえば、先ほどのcreate tableをファイルに記述しておいて、「.read <create tableが記述されたファイル>」といった具合に使います。

関連リソース

最後にSQLite関連の代表的なリソースへのリンクを示しておきます。 Mac OS XやFirefox、PHP5、さらにはGoogle Gearsが採用していることもあり、SQLiteに関する情報は以前に比べてよく見つかるようになっているので、適当に検索をしてもよいと思いますが、とりあえずの参考にはなると思います。

SQL As Understood By SQLite

本家のSQL言語リファレンス。

SQLite が認識できるクエリー言語

上記の翻訳版だが、最終更新日が4年前といささか古い。本家のリファレンスを読むときの参考程度に

sqlite: SQLite データベースと会話するプログラム

本編中でも紹介した、コマンドラインユーティリティの説明ページ

rktSQLite : SQLiteのSQLコマンド一覧

一部未説明はあるが、日本語でのコマンド一覧

メモ: SQLiteにCURRENT_TIMESTAMPがない? - dseg の日記

直接参考にはならないが、SQLite2系でCURRENT_TIMESTAMPをサポートしていないので、同様の機能を実現する方法が書いてある