0

我正在尝试使用以下宝石使 JRuby 和 SQLite3 工作:

有弹性的城堡 java (1.5.0146.1)

捆绑器 (1.3.2)

dbd-jdbc (0.1.6 java)

分贝 (0.4.5)

已弃用 (2.0.1)

jdbc-sqlite3 (3.7.2.1)

jruby-launcher (1.0.15 java)

jruby-openssl (0.8.2)

json (1.7.7 java)

机架 (1.5.2)

机架保护 (1.4.0)

耙子 (10.0.3)

rubygems 捆绑器 (1.1.1)

rvm (1.11.3.6)

西纳特拉 (1.3.5)

sqlite3 (1.3.7)

倾斜 (1.3.5)

这个代码:

require 'java'
require 'dbi'
require 'dbd/Jdbc'
require 'jdbc/sqlite3'

dbh = DBI.connect(
  "DBI:jdbc:sqlite:db.sqlite",  # connection string
   '',                                 # no username for sqlite3
   '',                                 # no password for sqlite3
   'driver' => 'org.sqlite.JDBC')      # need to set the driver

但我有这个错误:

DBI::InterfaceError: Unable to load driver 'jdbc' (underlying error: wrong constant name jdbc) load_driver at /home/gl/.rvm/gems/jruby-1.7.3/gems/dbi-0.4.5/lib/dbi .rb:300 mon_synchronize 在 /home/gl/.rvm/rubies/jruby-1.7.3/lib/ruby/1.9/monitor.rb:211 load_driver 在 /home/gl/.rvm/gems/jruby-1.7.3 /gems/dbi-0.4.5/lib/dbi.rb:242 _get_full_driver 在 /home/gl/.rvm/gems/jruby-1.7.3/gems/dbi-0.4.5/lib/dbi.rb:160 连接在 /home/gl/.rvm/gems/jruby-1.7.3/gems/dbi-0.4.5/lib/dbi.rb:145(根) 在 srv.rb:6

你有想法吗?

4

3 回答 3

1

我自己一直在尝试解决这个问题,并最终成功了——问题是驱动程序名称现在是“Jdbc”,而不是“jdbc”——大写在连接字符串和要求语句中都很重要。如果您将连接字符串更改为“DBI:Jdbc:sqlite:db.sqlite”,它应该可以正常工作。

于 2013-04-02T13:59:21.503 回答
0

我建议你使用ActiveRecord而不是 DBI。

您可以这样执行裸 SQL:

ActiveRecord::Base.connection.execute("SELECT * FROM some_table") 
于 2013-04-02T00:53:33.990 回答
0

接受的答案不起作用(至少对我来说)。我在 SO 和网络上搜索了几个小时(那里有很多好的和坏的信息),最后找到了一个可行的解决方案(至少对我来说)。通过添加“Jdbc::SQLite3.load_driver”行可以解决大部分问题。

require 'java'
require 'jdbc/sqlite3'

module JavaSql
  include_package 'java.sql'
end

Jdbc::SQLite3.load_driver
Java::org.sqlite.JDBC

conn_str = 'jdbc:sqlite:../Data/AflBettingHistory.db3'
conn = JavaSql::DriverManager.getConnection(conn_str)
stm = conn.createStatement
rs = stm.executeQuery("select Name from Team")
while (rs.next) do
  puts rs.getString("Name")
end
rs.close
stm.close
conn.close
于 2014-02-19T22:47:49.747 回答