ユーザー アカウントしか持っていないマシンで、ジョブの出力をテキスト ファイルではなく sqlite データベースにダンプしたいと考えています。このために、jarfile から jruby を実行します。
ローカルからgems ( dbi, dbd/Jdbc, jdbc/sqlite3
) を使用するアプローチは機能GEM_HOME
せず (適切なドライバーが見つかりません)、gem からの非推奨メッセージも生成されます (「include_class is deprecated. Use java_import.」)。
Zentus の sqlitejdbc-v056.jar を参照し、パスに Zentus を指定して JRuby を実行しました。
java -cp .:sqlitejdbc-v056.jar -jar jruby-complete-1.7.0.preview1.jar test.rb
test.rb はhttp://www.zentus.com/sqlitejdbc/に触発され、JRuby で SQLite3 JDBC ドライバーを初期化する方法は? :
require 'java'
require '/home/jens/jruby/sqlitejdbc-v056.jar'
org.sqlite.JDBC # load the driver so DriverManager detects it
p clazz = Java::JavaClass.for_name("org.sqlite.JDBC")
java.sql.DriverManager.registerDriver( clazz )
#Java::OrgSqlite::JDBC # alternate means of same
puts "enumerating..."
java.sql.DriverManager.getDrivers.each{ |e| puts e }
connection = java.sql.DriverManager.getConnection 'jdbc:sqlite:/home/jens/jruby/test.db'
begin
statement = connection.createStatement
...
ensure
connection.close
end
これから得られる出力は次のとおりです。
class org.sqlite.JDBC
enumerating...
sun.jdbc.odbc.JdbcOdbcDriver@73415727
DriverManager.java:602:in `getConnection': java.sql.SQLException: No suitable driver found for jdbc:sqlite:/home/jens/jruby/test.db
from DriverManager.java:207:in `getConnection'
from NativeMethodAccessorImpl.java:-2:in `invoke0'
...
不思議なことに、ドライバーは DriverManager によって一覧表示されますが、sqlite に適しているとは見なされません。
提案をお待ちしております。