在我只有一个用户帐户的机器上,我想将作业的输出转储到 sqlite 数据库而不是文本文件中。为此,我从 jarfile 运行 jruby。
使用本地 gem ( dbi, dbd/Jdbc, jdbc/sqlite3
)的方法不起作用(GEM_HOME
未找到合适的驱动程序),并且还会从 gem 中生成弃用消息(“include_class 已弃用。使用 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。
我期待着任何建议。