トップ 最新の日記 ユーザー登録 ログイン ヘルプ

のびのびなRuby日記 このページをアンテナに追加 RSSフィード

2007-07-01

クラスロード時に行ないたい処理を書く その2 クラスロード時に行ないたい処理を書く その2 - のびのびなRuby日記 を含むブックマーク はてなブックマーク - クラスロード時に行ないたい処理を書く その2 - のびのびなRuby日記 クラスロード時に行ないたい処理を書く その2 - のびのびなRuby日記 のブックマークコメント

ファイル構成

|-- db_util.rb
`-- jdbc.properties

jdbc.propertiesの内容

jdbc.driver=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://localhost
jdbc.user=sa
jdbc.password=

Javaプロパティファイルjdbc.propertiesの内容を読み取り、プロパティファイルの各キーに対する値をクラス変数に設定するサンプルプログラムを書いてみました。

#実用性はほとんどなし。

多重代入とクラスロード時に行ないたい処理(Static Initializer)の練習です。

class DBUtil
  def self.get_db_config_properies
    return [] << @@driver << @@url << @@user << @@password
  end

  private
  def self.init
    #jdbc.propertieswを開いて、全行を読み取ります。また読み取った各行は配列の要素になります。
    File.open("jdbc.properties", "r") do |file|
      @@list =  file.readlines
    end
    #配列@@listの各要素からjdbc.xxxxx=にマッチする文字列を空文字で置換
    @@list.map! {|x| x.gsub(/jdbc.\w+=/, '').chomp}
    #配列@@listの各要素を以下のクラス変数に代入
    @@driver, @@url, @@user, @@password = @@list
  end

  #クラスロード時に以下の処理が実行されます。
  self.init
end

実行例

#ロード時にjdbc.propertiesの読み取りと余分な文字列の排除及び読み取った各行を配列に代入しています。
irb(main):001:0> load 'db_util.rb'
=> true
irb(main):002:0> DBUtil.get_db_config_properies
#jdbc.propertiesの各キーにたいするそれぞれの値がリストに入って返ってきました。
=> ["org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost", "sa", ""]

感想

JRubyを使用して、JDBCを使ってDB接続する処理を書くときに、上記のDBUtilクラスを使ってみたいなと思い書いてみました。しかしドライバーが無かった場合やコネクションが取得できなかった場合の例外処理を書いていくとJavaドライバ読み込み及びコネクション取得のコードとあまり変わりはないのかな(?)

JoyceJoyce2011/09/08 11:56Okay I'm convinced. Let's put it to aitcon.

bkixldibotpbkixldibotp2011/09/09 00:267PJ9qE <a href="http://dgwfqdyyqqqm.com/">dgwfqdyyqqqm</a>

bgfqywracbgfqywrac2011/09/09 20:4950ykLW , [url=http://pxyavitoqudk.com/]pxyavitoqudk[/url], [link=http://sbysmbdavknc.com/]sbysmbdavknc[/link], http://bfpqukafzeud.com/

zbzbeawjqpzbzbeawjqp2011/09/10 18:26537XoC <a href="http://gtcdcctqzqpu.com/">gtcdcctqzqpu</a>

zdqgxulzdqgxul2011/09/12 19:14DGx0PY , [url=http://synexmpphtlm.com/]synexmpphtlm[/url], [link=http://mfqvmontfsjy.com/]mfqvmontfsjy[/link], http://vhwwuaheevtl.com/