2012-07-18 88 views
0

在一臺機器上我只有一個用戶帳戶,我想將作業的輸出轉儲到sqlite數據庫而不是文本文件。爲此,我從jar文件運行jruby。JRuby + Sqlitejdbc:找不到適合jdbc的驅動程序:sqlite:

從本地GEM_HOME的方法usings寶石(dbi, dbd/Jdbc, jdbc/sqlite3)沒有工作(沒有合適的驅動程序中),並從寶石生產過時的消息(「include_class代碼已被棄用。使用java_import。」)

我轉身Zentus路徑sqlitejdbc-v056.jar跑的JRuby與Zentus':

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... 
[email protected] 
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

首先,您應該使用bundler來管理您的gem依賴項。 Bundler使用一個Gemfile來列出你需要的寶石(把它放在腳本所在的位置)。並確保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 
相關問題