Top / Programming / Ruby / Ruby データベースライブラリ / SQLite/Ruby

SQLite/Ruby

軽量・高速なデータベースSQLiteをRubyから扱うためのライブラリ。

インストール

Windowsの場合

  1. RubyForgeから、 sqlite3-ruby(sqlite3-ruby-x.x.x.zip)をダウンロードする。

  2. ダウンロードしたファイルを展開する。

  3. インストールプログラムを実行する。

    ruby setup.rb config
    ruby setup.rb setup
    ruby setup.rb install
    

RubyGemsを使う場合

RubyGemsをインストールした後、 次のコマンドを実行する。

gem install sqlite3-ruby

SQLiteのインストール

  1. SQLite Download Pageから、 sqlitedll-3_x_x.zipをダウンロードする。

  2. ダウンロードしたファイルを展開する。

  3. sqlite.dllをパスの通ったディレクトリにコピーする。

使用方法

sqliteをロードする

require 'sqlite3'

データベースを作成する

db = SQLite3::Database.new("data.db")

データベースを閉じる

db.close

テーブルを作成する

String型の「氏名」フィールド、 Integer型の「年齢」フィールド、 String型の「部署」フィールド、 を持つ「社員」テーブルを作成する。

sql = <<SQL
create table 社員 (
 名前 varchar(10),
 年齢 integer,
 部署 varchar(200)
);
SQL
db.execute(sql)

使用できるデータ型

レコードを登録する

レコードを登録する

sql = "insert into 社員 values ('橋本', 26, '広報部')"
db.execute(sql)

プレースホルダとバインド値を使用した場合

sql = "insert into 社員 values (?, ?, ?)"
db.execute(sql, '小泉', 35, '営業部')
db.execute(sql, '亀井', 40, '営業部')

名前付きプレースホルダも使用可能

sql = "insert into 社員 values (:name, :age, :post)"
db.execute(sql, :name => '小泉', :age => 35, :post => '営業部')
db.execute(sql, :name => '亀井', :age => 40, :post => '営業部')

レコードを取得する

レコードを取得する

db.execute('select * from 社員') do |row|
 #rowは結果の配列
 puts row.join("\t")
end

結果

橋本 26 広報部
小泉 35 営業部
亀井 40 営業部

プレースホルダとバインド値を使用した場合

db.execute('select * from 社員 where 年齢=?', 40) do |row|
 #rowは結果の配列
 puts row.join("\t")
end

結果

亀井 40 営業部

列名とレコードを取得する

db.execute2('select * from 社員') do |row| 
 #rowは結果の配列。ただし最初のレコードは列名。
 puts row.join("\t")
end

結果

名前 年齢 部署
橋本 26 広報部
小泉 35 営業部
亀井 40 営業部

列名とレコードを別々に取得したい場合

# columnsに列名、rowsにレコードが入る
columns, *rows = db.execute2('select * from 社員')

ResultSetを取得する

result = db.query('select * from 社員')
result.each do |row|
 puts row.join("\t")
end

結果

橋本 26 広報部
小泉 35 営業部
亀井 40 営業部

最初のレコードを取得する

result = db.get_first_row('select * from 社員')
puts result.join("\t")

結果

橋本 26 広報部

最初のレコードの最初の値を取得する

count = db.get_first_value('select count(*) from 社員')
puts count

結果

3

レコードを更新する

#小泉の部署を広報部に更新する
db.execute("update 社員 set 部署='広報部' where 名前='小泉'")

レコードを削除する

# 亀井を削除
db.execute("delete from 社員 where 名前='亀井'")

トランザクション

ブロックを与えた場合、終了した時点でコミットする。

db.transaction do
 sql = "insert into 社員 values (?, ?, ?)"
 db.execute(sql, '橋本', 26, '広報部')
 db.execute(sql, '小泉', 35, '営業部')
 db.execute(sql, '亀井', 40, '営業部')
end

ブロックを与えない場合、明示的にコミットまたはロールバックを行う。

db.transaction
begin
 db.execute('delete from 社員')
 db.commit
rescue
 db.rollback
end

更新履歴

[フレーム]

AltStyle によって変換されたページ (->オリジナル) /