rubyでsqliteを使う方法

小規模なデータベースを扱う場合は sqlite がおすすめです.

SQLが使えるデータベース,つまりRDBMSとしては,PostgreSQLMySQLsqliteが有名です.sqliteは,他のデータベースと異なり,サーバをいちいち立ち上げる必要がなくsetupが簡単というメリットがあります.

以下,ruby から sqlite を使う方法として, SQLite3/Ruby の使い方をまとめます.

注意事項

sqliteには複数のバージョンがあり,微妙に仕様が異なります.以下このエントリでは バージョン3系,つまり sqlite3 を使うものとします.

SQLite3/Ruby のインストール

debian であれば libsqlite3-ruby を入れるだけです.

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 )


SQLite入門 すぐに使える軽快・軽量データベース・エンジン
西沢 直木
翔泳社
売り上げランキング: 68520
おすすめ度の平均: 4.0
4 初心者向け
5 SQLの入門に最適
5 DB連携の本格Webプログラム入門書としても最適
4 SQLiteの入門には最適
3 題名どおりSQLiteの入門にはいいんじゃないでしょうか

集合知プログラミング
Toby Segaran
オライリージャパン
売り上げランキング: 8311
おすすめ度の平均: 4.5
4 プログラムはいまいち
4 ようこそ、Web 2.0の世界へ
5 知的好奇心が刺激された!!
5 機械学習の現実世界での応用
3 私には敷居が高かったかも・・・