0

次のgemを使用してJRubyとSQLite3を動作させようとしています。

bouncy-castle-java(1.5.0146.1)

バンドラー(1.3.2)

dbd-jdbc(0.1.6 java)

dbi(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-bundler(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:ドライバー'jdbc'を読み込めません(根本的なエラー:間違った定数名jdbc)/home/gl/.rvm/gems/jruby-1.7.3/gems/dbi-0.4.5/lib/dbiのload_driver .rb:300 mon_synchronize at /home/gl/.rvm/rubies/jruby-1.7.3/lib/ruby/1.9/monitor.rb:211 load_driver at /home/gl/.rvm/gems/jruby-1.7.3 /gems/dbi-0.4.5/lib/dbi.rb:242 _get_full_driver at /home/gl/.rvm/gems/jruby-1.7.3/gems/dbi-0.4.5/lib/dbi.rb:160 connect /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」になったことです-接続文字列とrequireステートメントの両方で大文字と小文字を区別することが重要です。接続文字列を「DBI:Jdbc:sqlite:db.sqlite」に変更すると、正常に機能するはずです。

于 2013-04-02T13:59:21.503 に答える
0

DBIではなくActiveRecordを使用することをお勧めします。

したがって、ベアSQLを実行できます。

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

受け入れられた答えは機能しません(少なくとも私にとっては)。私はSOとWebを何時間も検索し(そこには良い情報と悪い情報がたくさんあります)、ついに(少なくとも私にとっては)うまくいく解決策を見つけました。問題の大部分は、「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 に答える