【发布时间】:2010-12-15 14:49:05
【问题描述】:
如何在不使用活动记录的情况下通过 JDBC 访问 SQLite3?
【问题讨论】:
标签: java ruby sqlite jdbc jruby
如何在不使用活动记录的情况下通过 JDBC 访问 SQLite3?
【问题讨论】:
标签: java ruby sqlite jdbc jruby
安装 jdbc-sqlite3 gem
然后,在你的 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
【讨论】:
capitalized package or class not found (java.org.sqlite.JDBC')"`。任何建议将不胜感激。即使有人能告诉我如何找到为自己出去。
gem list时会出现jdbc-sqlite3吗?只要我将require 'rubygems' 添加为第一行,以上内容就对我有用,没有错误。我正在使用 jruby-1.6.4。
import Java。该类中的一种方法使用上面答案中的代码。当我尝试运行它时,我现在收到错误消息:Java package java' 没有方法 '+'`。我需要 rubygems 并且 gem 已正确安装。
jdbc 驱动程序文件sqlite-3.5.8.jar 被复制到 gem 目录中。需要将其复制到 jruby/lib 目录中。应用程序也需要重启。
驱动文件可以直接从这里下载
http://files.zentus.com/sqlitejdbc/sqlitejdbc-v056.jar
http://www.zentus.com/sqlitejdbc/
【讨论】:
这是一个使用 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
【讨论】:
org.sqlite.JDBC 行之前执行 Jdbc::SQLite3.load_driver 才能使其正常工作——可能是由于发布此答案后 Jdbc 发生了变化。