小規模なデータベースを扱う場合は sqlite がおすすめです.
SQLが使えるデータベース,つまりRDBMSとしては,PostgreSQLやMySQL,sqliteが有名です.sqliteは,他のデータベースと異なり,サーバをいちいち立ち上げる必要がなくsetupが簡単というメリットがあります.
以下,ruby から sqlite を使う方法として, SQLite3/Ruby の使い方をまとめます.
注意事項
sqliteには複数のバージョンがあり,微妙に仕様が異なります.以下このエントリでは バージョン3系,つまり sqlite3 を使うものとします.
SQLite3/Ruby の使い方
良く使うメソッドを列挙していきます.
Database への接続
sqlite ではデータベース毎にファイルを一つ作成します.SQLite3/Ruby では以下のように書きます.
require 'sqlite3' db = SQLite3::Database.new("test.db")
この例ではカレントディレクトリにある test.db というファイルをデータベースとしてopenします.test.db が無い場合はあらたにファイルが作成されます.
SQLの実行 execute()
create table 文を実行する例です
#!/usr/bin/ruby require 'sqlite3' # ヒアドキュメントを使ってSQL文を変数 SQL に格納します SQL=<<EOS create table tbl_test ( id integer, name text ); EOS db = SQLite3::Database.new("test.db") db.execute(SQL)
insert文の例
db.execute("insert into tbl_test (id, name) values('#{id}', '#{name}')")
delete文の例
db.execute("delete from tbl_test where id=='#{id}'")
SQLの実行結果の取得方法 (select文のつかいかた)
select 文の結果は, ruby のblock構文で受け取ることができます.rubyらしい書き方になります.
sql = "select id, name from tbl_test" db.execute(sql) { |id, name| print "#{id} #{name} \n" }
また,select 文の最初の結果だけがほしい場合は get_first_value() を使う方法もあります.
total = db.get_first_value("select count(*) from tbl_test")
エラー処理
クエリのエラーは,例外として補足できます.例外は SQLite3::SQLException というオブジェクトになります.
begin db.execute("不正なクエリ") rescue SQLite3::SQLException print "execute()が失敗しました.\n" end
トランザクション transaction
トランザクションは以下のように書きます
db.transaction { |t|
t.execute(sqlA);
t.execute(sqlB);
t.execute(sqlC);
}
重要な点は db.transaction() と "()" を付けない点です.よく引っ掛かるので気をつけましょう.
バッチ処理
複数のSQL文をまとめて実行するには execute_batch () を使います
# ヒアドキュメントを使い複数のSQL文を変数SQLsに格納します. SQLs=<<EndOfSQL drop table if exists tbl_test; create table tbl_test ( id integer, name text ); insert into tbl_test (id, name) values(0, 'hoge'); insert into tbl_test (id, name) values(1, 'fuga'); EndOfSQL # SQLs をまとめて実行します db.execute_batch( SQLs )