データベースに接続してみた
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 Rails、rubygemsとかをインストールし、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は噂通り遅いですね。
データ件数が多いときは使えなさそう。使えない・・・