在我只有用户帐户的计算机上,我想将作业的输出转储到sqlite数据库而不是textfiles。为此,我从jarfile中运行jruby。
使用来自本地dbi, dbd/Jdbc, jdbc/sqlite3
的gems(GEM_HOME
)的方法不起作用(找不到合适的驱动程序)并且还从gems生成弃用消息(“不包括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/和How to initialize the SQLite3 JDBC driver in JRuby?:
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。
我期待着任何建议。
答案 0 :(得分:0)
首先,您应该使用bundler来管理您的gem依赖项。 Bundler使用Gemfile列出您需要的gem(将它放在脚本所在的位置)。并确保jruby在你的道路上。
在您的情况下,Gemfile应包含:
source 'http://rubygems.org'
gem "activerecord-jdbcsqlite3-adapter", ">= 1.2"
然后执行:
bundle install --path vendor/bundle
然后像这样修改你的脚本:
require 'rubygems'
require "java"
require 'bundler/setup'
require 'jdbc/sqlite3'
Bundler.require
org.sqlite.JDBC # load the driver so DriverManager detects it
p clazz = Java::JavaClass.for_name("org.sqlite.JDBC")
java.sql.DriverManager.registerDriver( clazz )
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