Ruby/DBI でデータベース操作の記述を抽象化する
Ruby/DBI をインストールする
すでに MySQL/Ruby がインストールされているものとする。
#gem search --remote dbi *** REMOTE GEMS *** Bulk updating Gem source index for: http://gems.rubyforge.org/ dbi (0.4.0) dbi-dbrc (1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.1, 1.0.0) m4dbi (0.6.0, 0.5.0) # gem install dbi
接続テストを行う
require 'rubygems' require 'dbi' dns = 'DBI:Mysql' hostname = 'localhost' database = 'mysql' username = 'yourname' password = 'yourpassword' begin # MySQL に接続をする dbh = DBI.connect("#{dns}:#{database}:#{hostname}", username, password) sql = 'SELECT `User`, `Host` FROM `user` WHERE `Host` = ?' # プリペアード・ステートメントを生成する prepared_statment = dbh.prepare(sql) # プリペアード・ステートメントを実行する prepared_statment.execute(hostname) # 結果を1行ずつ取得する prepared_statment.each do |row| puts row.join(', ') end # 検索結果を開放する prepared_statment.finish rescue DBI::DatabaseError => e # エラーが発生した場合、内容を表示する puts "[Error:#{e.err}] #{e.errstr}" ensure # 正常終了・異常終了にかかわらず、データベースへの接続を閉じる dbh.disconnect if dbh end
実行結果は下記の通り。
littlebuddha, localhost root, localhost
Ruby/DBI は MySQL/Ruby よりも便利
- [Ruby/DBI - Direct database access layer for Ruby:title=Ruby/DBI ドキュメント]
- Ruby/DBI RDoc (API)
- Ruby/DBI(翻訳) - Ruby DBI モジュールを使う - 最終更新日 2003-05-27
- Ruby/DBI のサンプルソース
結果セットからフィールド名でアクセスできる。
# 結果を1行ずつ取得する prepared_statment.each do |row| puts "#{row['User']}@#{row['Host']}" end
実行結果。
littlebuddha@localhost root@localhost
また、配列のインデックス値を取得することもできる。
prepared_statment.each do |row| row.each_with_index do |value, index| puts "#{index}: #{value}" end end
実行結果。
0: littlebuddha 1: localhost 0: root 1: localhost
フィールド名を取得したい場合は each_with_name を利用する。
prepared_statment.each do |row| row.each_with_name do |value, index| puts "#{index}: #{value}" end end
実行結果。
User: littlebuddha Host: localhost User: root Host: localhost