2009-11-11 34 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