データベースに接続してみた

Rubyをはじめたので、とりあえずデータベースに接続してみます。
データベースはMySQLを利用します。

各ライブラリはインストールされているものとします・・・

Ruby/DBI

require 'dbi'

begin
 # データベース接続。DBI::DatabaseHandleオブジェクトを作成
 db = DBI::connect("dbi:Mysql:database:hostname", "username", "password")


 sql = "select * from users"
 rs = db.execute sql


 # eachで1件ずつオブジェクトをフェッチできる
 rs.each do |row|
  puts row.join ", "
 end


 # 件数を知りたいときは・・・
 puts "#{rs.rows}"


 # プリペアード・ステーメント
 sql = "select * from users where id = ?"
 rs = db.prepare sql


 # プレース・ホルダーを設定して実行
 rs.execute "1"


 # 例外の場合
 # 全ての例外をキャッチできます
 rescue DBI::DatabaseError => e
  puts "[Error:#{e.err}] #{e.errstr}"


 # 解放
 rs.finish if rs
 db.disconnect if db
end

MySQLに接続して、表示まではできました〜

MySQL/Ruby

require 'mysql'

begin
 # データベース接続。MySQLオブジェクトを作成
 db = Mysql::connect("hostname", "username", "password", "database")


 sql = "select * from users"
 rs = db.query sql


 # eachで1件ずつオブジェクトをフェッチ
 rs.each do |row|
  puts row.join ", "
 end


 # 件数を知りたいときは・・・
 puts "#{rs.num_rows}"


 # プリペアード・ステーメント
 sql = "select * from users where id = ?"
 rs = db.prepare sql


 # プレース・ホルダーを設定して実行
 rs.execute "1"


 # 例外
 rescue Mysql::Error => e
  puts "[Error:#{e.errno}] #{e.error}"


 # 解放
 rs.free if rs
 rs.close if rs
 db.close if db
end

ActiveRecord

適当にRuby on Railsrubygemsとかをインストールし、Railsアプリをつくってみました。

  • でもActiveRecord単体で使ってみました
  • 適当にRailsの規約に従って、テーブルも作成してあります
  • 最後に、適当にやってはいけません・・・

#!/usr/bin/ruby


require 'rubygems'
require 'active_record'


# データベース接続
ActiveRecord::Base.establish_connection(
 :adapter => "mysql",
 :host => "localhost",
 :username => "xxxxxx",
 :password => "xxxxxxx",
 :database => "xxxxxx",
 :socket => "/var/lib/mysql/mysql.sock",
 :encoding => "utf8"
)


# この接続方法は微妙・・・
# RailsではYAMLで管理(config/database.ym)しているので、そこから読み込んでみます
conf = YAML.load_file("config/database.yml")
ActiveRecord::Base.establish_connection(conf["development"])


# クラスを宣言
class User < ActiveRecord::Base
end


# レコードを表示
User.find(:all).each { |user|
 p user.name
}

とりあえず、全部接続して表示はできました。
それだけです・・・
ActiveRecordは噂通り遅いですね。
データ件数が多いときは使えなさそう。使えない・・・