2008-05-28

JRubyで DBIを使う ( DBI / Jdbc )

Javaでいうところの JDBCに相当するレイヤが Rubyにおける DBIである。

ActiveRecord用に最初から設計されたデータベースじゃないと ActiveRecordで使うのはとても厳しい。そういう場合に取り得る選択としてはひとまず ORMの使用をあきらめて SQLを用いたDBアクセスをするというのがあるが、そうするにしても JRubyから java.sql.* を使うようではなんだか負けた気分(っていうか最初から Javaで書けば?って話)なので、 ここはひとつ JRubyから DBIを使ってデータベースにアクセスすることにする。

以下、$JRUBY_HOME/binに PATHが通っている前提で。

JRubyに DBIをインストール


RubyForgeから "Ruby/DBI"を探し、dbi-*.tar.gz をダウンロード・展開したら、

jruby setup.rb config --without=dbd_sqlite,dbd_sybase
jruby setup.rb setup
jruby setup.rb install

のようにする。これで JRubyに DBIがインストールされたのだが、これとは他に DBIと JDBCをブリッジするドライバが必要となる。

JDBC用のDBIドライバをインストール


RubyForgfeで "Ruby DBI-JDBC driver" を探し、dbi-jdbc.tar.gzをダウンロード・展開する。
アーカイブの中に入っていた DBD ディレクトリを $JRUBY_HOME/lib/ruby/site_ruby/1.8/ に放り込む。
結果、
$JRUBY_HOME/lib/ruby/site_ruby/1.8/DBD/Jdbc/Jdbc.rb
$JRUBY_HOME/lib/ruby/site_ruby/1.8/DBD/Jdbc/JdbcTypeConversions.rb
が存在する状態になれば OK

DBI-JDBCの使い方例

require 'dbi'

url = 'DBI:jdbc:mysql://localhost/mydb'
username = 'username'
password = 'password'
driver = 'com.mysql.jdbc.Driver'
DBI.connect(url, username, password, 'driver'=>driver) do |dbh|
p dbh.select_all('show tables')
}

なお型変換やNULLの扱いのあたりで制限事項が色々あるため、dbi-jdbc.tar.gzに含まれているREADMEには一度目を通されたし。
JNDIからデータソースを取ってきてそこからgetConnection()する方法は用意されていないようだ。簡単なハックで出来るようになると思うけど。

DBIの API仕様については下記を参照のこと。
DBI Interface Specification Version 0.2.2 (Draft)

ラベル:

0 件のコメント:

コメントを投稿

<< ホーム