対象: ActiveRecordを利用するRubyではおなじみのActiveRecordであるが、JRubyでもactiverecord-jdbc-adapterがあればActiveRecordが利用できる。必要なのはActiveRecord、activerecord-jdbc-adapter、及び接続したいDBのJDBCドライバの3点である。JavaでJDBCを使い慣れた方であれば、JDBCドライバ名やURL等の情報を記述することで簡単にDBアクセスが可能となる。 gemのインストールまずはActiveRecordのgemをインストールする。この記事執筆時点でのActiveRecordの最新版は3.0.3である。 $ gem install activerecord 企業等、インターネットに接続されていない環境ではこちらを参考にしてActiveRecordのgemをローカルでインストールする。 $ gem install --local activerecord-3.0.3.gem 次にactiverecord-jdbc-adapterのgemをインストールする。この記事執筆時点でのactiverecord-jdbc-adapterの最新版は1.1.0である。インターネットに接続されていない環境の場合は上記のActiveRecordの例を参考にしていただきたい。 $ gem install activerecord-jdbc-adapter 尚、JDBCドライバのjarには予めCLASSPATHを通すか、JRubyインストールディレクトリのlibに置いておく必要がある。因みに、MySQLのJDBCドライバはmysql-connector-java-5.1.12.jarのようなファイル名となる。 ActiveRecordの使い方以下のスクリプトはMySQLのtestdbデータベースにあるemployeesテーブルにアクセスする例である。ActiveRecordでは記述したクラス名(ここではEmployee)の複数形であるemployeesというテーブルがある前提になっている。また、このテーブルにはidという名前で主キーが存在する必要がある。他にもいくつか決まりがあるのだがここでは割愛する。 require "java" require "rubygems" require "active_record" $KCODE="UTF8" # 日本語が文字化けする場合入れてみよう ActiveRecord::Base.establish_connection( :adapter => "jdbc", # アダプタ名はjdbc :driver => "com.mysql.jdbc.Driver", # JDBCドライバ名 :url => "jdbc:mysql://localhost/testdb", # URL :username => "mobile", :password => "mobile" ) class Employee < ActiveRecord::Base end #result = Employee.find(:all) result = Employee.all result.each do |emp| p emp.id p emp.name p emp.age p emp.lastupdate end 特定のDB専用アダプタ特定のDBの場合、activerecord-jdbcxxx-adapterのように専用のアダプタが用意されている。例えば、MySQLならばactiverecord-jdbcmysql-adapterを別途インストールするとestablish_connectionメソッドでJDBC特有の記述をしなくても良くなる。 ActiveRecord::Base.establish_connection( :adapter => "jdbcmysql", # アダプタ名はjdbcmysql :hostname => "localhost", # ホスト名 :database => "testdb", # データベース名 :username => "mobile", :password => "mobile" ) ActiveRecordが発行するSQLが見たい開発時等、ActiveRecordがDBに対してどんなSQLを発行しているのか見たいと思ったことはないだろうか。以下の1行を加えることで標準出力にActiveRecordが生成したSQLが表示される。 ActiveRecord::Base.logger = Logger.new(STDOUT) # SQLを標準出力へ テーブル名が複数形ではないActiveRecordを使う際、対象となるテーブル名はクラス名の複数形でなければならないが、実際の開発現場では既存のテーブルにアクセスしなければならない事も多いだろう。それではActiveRecordは使えないのかと言うとそうでもない。set_table_nameで対象のテーブル名を変更することができる。 class Employee < ActiveRecord::Base set_table_name "table_name" # ここに対象のテーブル名を書く set_inherit_column # 既存のテーブルにtypeカラムがある場合この1行を書いてみよう end また、既存テーブルでActiveRecordを利用しようとして、typeカラムがどうのこうのとのエラーが出たことはないだろうか。ActiveRecordではtypeカラムは特別な意味を持っている。このため、テーブル内に別の意味でtypeカラムがあるとエラーが発生する。これをとりあえず回避するならset_inherit_columnと記述すると良い。 (2010/12/18)
Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]
|