首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JRuby + Sqlitejdbc :没有找到适合jdbc:sqlite的驱动程序:

JRuby + Sqlitejdbc :没有找到适合jdbc:sqlite的驱动程序:
EN

Stack Overflow用户
提问于 2012-07-19 02:31:55
回答 1查看 1.2K关注 0票数 0

在我只有一个用户帐户的机器上,我想将作业输出转储到sqlite数据库中,而不是文本文件中。为此,我从jarfile运行jruby。

使用来自本地GEM_HOME的gems (dbi, dbd/Jdbc, jdbc/sqlite3)的方法不起作用(找不到合适的驱动程序),并且还从gems生成弃用消息("include_class已弃用,请使用java_import。“)

我转到Zentus的sqlitejdbc-v056.jar并在路径中使用Zentus‘运行JRuby:

java -cp .:sqlitejdbc-v056.jar -jar jruby-complete-1.7.0.preview1.jar test.rb

http://www.zentus.com/sqlitejdbc/How to initialize the SQLite3 JDBC driver in JRuby?的启发下,test.rb:

代码语言:javascript
复制
require 'java'
require '/home/jens/jruby/sqlitejdbc-v056.jar'

org.sqlite.JDBC                 # load the driver so DriverManager detects it 
p clazz = Java::JavaClass.for_name("org.sqlite.JDBC")
java.sql.DriverManager.registerDriver( clazz )
#Java::OrgSqlite::JDBC          # alternate means of same

puts "enumerating..."
java.sql.DriverManager.getDrivers.each{ |e| puts e }

connection = java.sql.DriverManager.getConnection 'jdbc:sqlite:/home/jens/jruby/test.db'
begin
  statement = connection.createStatement
  ...
ensure
  connection.close
end

我从这里得到的输出是:

代码语言:javascript
复制
class org.sqlite.JDBC
enumerating...
sun.jdbc.odbc.JdbcOdbcDriver@73415727
DriverManager.java:602:in `getConnection': java.sql.SQLException: No suitable driver found for jdbc:sqlite:/home/jens/jruby/test.db
from DriverManager.java:207:in `getConnection'
from NativeMethodAccessorImpl.java:-2:in `invoke0'
    ...

奇怪的是,DriverManager列出了该驱动程序,但并不认为它适用于sqlite。

我期待着任何建议。

EN

回答 1

Stack Overflow用户

发布于 2012-07-19 03:16:37

首先,您应该使用bundler来管理gem依赖项。Bundler使用Gemfile列出您需要的gem(将它放在您的脚本所在的位置)。并确保jruby在您的路径中。

在您的示例中,Gemfile应包含:

代码语言:javascript
复制
source 'http://rubygems.org'

gem "activerecord-jdbcsqlite3-adapter", ">= 1.2"

然后执行:

代码语言:javascript
复制
bundle install --path vendor/bundle

然后像这样修改你的脚本:

代码语言:javascript
复制
require 'rubygems'
require "java"
require 'bundler/setup'
require 'jdbc/sqlite3'

Bundler.require
org.sqlite.JDBC                 # load the driver so DriverManager detects it 
p clazz = Java::JavaClass.for_name("org.sqlite.JDBC")
java.sql.DriverManager.registerDriver( clazz )

puts "enumerating..."
java.sql.DriverManager.getDrivers.each{ |e| puts e }

connection = java.sql.DriverManager.getConnection 'jdbc:sqlite:/home/jens/jruby/test.db'
begin
  statement = connection.createStatement
ensure
  connection.close
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11548035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档