・データベース本体がライブラリ形式で提供されるため、サービス(デーモン)のインストールなどの手順が不要で可搬性に優れる。
・データベースが1つのファイルで、CPUを選ばないデータ形式のため、コピーするだけで、使用することができます。
・SQL92に準拠しているので、機能的に不足はない。トランザクションもサポートされています。
ただし、処理が衝突したを場合など別プロセスを待機したりせずにエラーになるので、積極的にトランザクションを使用したほうが安全です。
Ruby on Railsの標準DBは長らくMySqlでしたが、最近ではSqliteを標準DBとして採用しています。
さて、今回はRailsでおなじみのActiveRecordではなくて、PerlでおなじみのDBIを使ってみましょう。DBIは、データベース独立インターフェースと呼ばれ、データベースによらない独立したインターフェースを提供しています。
DBIはRubyの標準パッケージに含まれていませんので、別途組み込む必要があります。
> gem install dbi
次にsqlite3のDBドライバーを組み込みます。
> gem install dbd-sqlite3
sqliteはsqlite3やsqlite3-rubyを参照していますので、必要なパッケージを芋づる式にインストールしてくれます。ユーザーはパッケージの依存関係を気にせずにインストールできるようになっています。
sqliteの内部文字列はutf8を想定しています。このあたりは、いろいろな文字コードを扱えるMySqlやMSDEなどのほうが強力ですが、RubyやPerlに関する限りutf8オンリーでも不都合はありません。
しかしsqlite3.exeというコマンドライン版では不都合なことに漢字コード変換をしてくれません。そのため、Windowsで使用するにはちょっと問題があります。さらにコマンドラインだけでデータベースを操作するのはかなり面倒です。
日本語で使い勝手のいいソフトを探したところPupsqliteというソフトが見つかりましたのでこれを使ってみます。
https://www.forest.impress.co.jp/lib/offc/business/db/pupsqlite.html
このソフトは、zip圧縮されており、それを適当なフォルダーに展開するだけで使用できます。使用するライブラリが標準的なものであれば、sqliteを使用したソフトは特別なインストーラーを使用せずに配布できるところも魅力です。
なにもデータがないのは寂しいので、ちょっと簡単なテーブルを作成します。
CREATE TABLE [mst_user] ( [id] INTEGER PRIMARY KEY AUTOINCREMENT, [name] TEXT NOT NULL, [mail] TEXT NOT NULL, [passwd] TEXT NOT NULL );
sqliteの型は、TEXT、INTEGER、REAL、DATETIME、BOOLEAN,BLOBといたってシンプルです。
データを入力します。
では、これを表示してみましょう。
# -*- encoding: UTF-8 -*- # require 'dbi' require 'time' $db_file = 'test.db3' $db_url = "DBI:SQLite3:#{$db_file}" dbh = DBI.connect( $db_url ) dbh['AutoCommit'] = true sqlSelect = "SELECT *, name as TEST FROM mst_user " dbh.execute(sqlSelect){|stm| stm.each{|row| printf "%4d %-20s %-24s %-10s\n", row["id"], row["name"], row["mail"], row["passwd"] } }
実行します。
1 柳田 左人志 yanagita@examople.jp ******* 2 伊藤 博文 itoh@example.jp *****
なんとか、使える状況まできましたので、そのうちもう少し掘り下げてみたいと思います。
yna