Starter ToolKit DB2 on Railsを試す
昨日は久しぶりにDB2をいぢったりしてけっこう面白かったわけですが、何しろ大掛かりな業務アプリケーションを構築するわけじゃないのであんな作業に時間を費やすのはやっぱり面倒。昨日、一日でうんざりしちゃいました。それで、やっぱりrubyでなんとかできないかと思って調べてみたらもちろんありましたよ。ibm_db.0.8.0と、ruby-db2-0.4.4の2つ。さぁ、どっちにしようかなと迷っていたら本家IBMでもStarter Toolkit for DB2 on Railsというのをリリースしていてこれに決定。インストールはUnofficial DB2 BLOG | Rails + DB2メモを参照しました。この記事では、「LIBをシンボリックリンクで解決してね」となっていますが現状では環境変数DB2DIRとDB2LIBを設定すれば問題ないようです。
export DB2DIR=/usr/local/ibm/db2/V9.1
export DB2LIB=/usr/local/ibm/db2/V9.1/lib
db2 create db TEST USING CODESET UTF-8 TERRITORY JP
rake
:後は、記事どおりにできあがったドライバを(ibm_db2.so)rubyのディレクトリ(/usr/local/lib/ruby/1.8/i686-linux)にコピーすればとりあえず完了。rails(activerecord)で使う場合はaciverecord-x.x.x/lib/active_record/connection_adapters/にコピーしてactive_record.rbのRAILS_CONNECTION_ADAPTERSにibm_db2を追加すれば良いようです。今回はrailsとは関係なくrubyスクリプトからdb2を操作できればいいわけなので試してませんが...ここまでで、一応準備完了。後はスクリプトを書くだけです。Starter Toolkitのtestsディレクトリにテスト用のコードがたくさんあるのでそれを参考にしながら例えば昨日C/C++で作成したのと同じスクリプトを書くと、
require 'ibm_db2'
conn = DB2::connect 'sample','db2inst','password'
stmt = DB2::prepare conn, "select a,b,c from samples where x > ?"
z = ARGV.shift
DB2::bind_param stmt, 1, 'z'
DB2::execute(stmt)
while(row = DB2::fetch_assoc(stmt))
row.each do | k,v |
puts "#{k}:#{v}"
end
end
DB2::close connうー、やっぱ楽チン。単純にmakefileを作成しないで済むという楽チンさに加えてバインド変数を事前に定義しないで済むのでコードが非常にスッキリします。唯一悩んだのは、ハッシュのキーがすべて大文字になってるってことですね。最初、row['a']とかしていたら真っ白な行が表示されて???だったけど。なんか意味があるのかな?
以前、大量のレコードを無理矢理rubyで処理しようとして痛い目にあったことがありますが、普段は絶対こっちの方が楽ですなぁ。問題は、本番環境にrubyその他のツールを仕込めるかどうかですよ....










Comments