2009-11-11 66 views

回答

1

安裝JDBC-sqlite3的寶石

然後,在你的JRuby腳本:

require 'jdbc/sqlite3' 
url = "jdbc:sqlite:path.to.your.db" 
begin   
    Java::org.sqlite.JDBC#initialize the driver 
    connection = JavaLang::DriverManager.getConnection(url) #grab your connection 
rescue => error  
    #handle error 
end 
+0

我得到一個錯誤,當我嘗試這樣做:'資本包或類未找到('java.org.sqlite.JDBC')「'任何建議將。請注意,即使有人可以告訴我如何爲自己找出答案 – 2012-02-13 18:51:32

+0

@duckyfuzz您使用的是什麼版本的JRuby等?當您運行'gem list'時,jdbc-sqlite3會出現嗎?只要我在第一行添加'require'rubygems''就行了我正在使用jruby-1.6.4 – 2012-02-15 12:12:40

+0

@RobertHaines使用1.6.4我有一個帶有'import Java'的類,其中一個班上的方法使用上面答案中的代碼。當我嘗試運行它時,我現在得到錯誤:'Java package'java'沒有方法'+''。我需要rubygems,並且正確安裝了寶石。 – 2012-02-16 09:01:42

0

JDBC驅動程序文件sqlite-3.5.8.jar被複制到寶石目錄。它需要被複制到jruby/lib目錄中。應用程序也需要重啓。

驅動程序文件可以直接從這裏

http://files.zentus.com/sqlitejdbc/sqlitejdbc-v056.jar 

http://www.zentus.com/sqlitejdbc/ 
5

下載下面是使用JRuby 1.6.6工作的例子(用Ruby 1.8兼容模式)使用JDBC-sqlite3的3.7.2。

require 'rubygems' 
require 'jdbc/sqlite3' 
require 'java' 

org.sqlite.JDBC     # load the driver so DriverManager detects it 
#Java::OrgSqlite::JDBC   # alternate means of same 

connection = java.sql.DriverManager.getConnection 'jdbc:sqlite:test.sqlite3' 
begin 
    statement = connection.createStatement 
    begin 
    statement.executeUpdate("create table user (name varchar, pass varchar)") 
    statement.executeUpdate("insert into user values ('alice', 1234)") 
    statement.executeUpdate("insert into user values ('bob', 5678)") 
    statement.executeUpdate("insert into user values ('charlie', 'asdf')") 

    rs = statement.executeQuery("select * from user") 
    begin 
     puts "user\tpass" 
     while rs.next 
     puts ["#{rs.getString(1)}", 
       "#{rs.getString(2)}"].join("\t") 
     end 
    ensure 
     rs.close 
    end 

    ensure 
    statement.close 
    end 
ensure 
    connection.close 
end 

輸出:

$ rm -f test.sqlite3; ruby sql.rb 
user pass 
------------ 
alice 1234 
bob  5678 
charlie asdf 
+0

這是一個非常有幫助的答案。然而,我想我會指出,我必須在行'''org.sqlite.JDBC'''之前執行''''Jdbc :: SQLite3.load_driver'''才能工作 - 可能是因爲因爲這個答案已發佈,所以在Jdbc中進行更改。 – abhillman 2015-06-21 05:20:59