如何使用 JRuby 和 JDBC 连接到 Oracle
Posted
技术标签:
【中文标题】如何使用 JRuby 和 JDBC 连接到 Oracle【英文标题】:How to connect to Oracle using JRuby & JDBC 【发布时间】:2009-04-16 08:22:24 【问题描述】:第一种方法:裸机
require 'java'
require 'rubygems'
require "c:/ruby/jruby-1.2.0/lib/ojdbc14.jar" # should be redundant, but tried it anyway
odriver = Java::JavaClass.for_name("oracle.jdbc.driver.OracleDriver")
puts odriver.java_class
url = "jdbc:oracle:thin:@myhost:1521:mydb"
puts "About to connect..."
con = java.sql.DriverManager.getConnection(url, "myuser", "mypassword");
if con
puts " connection good"
else
puts " connection failed"
end
上面的结果是:
sqltest.rb:4: cannot load Java class oracle.jdbc.driver.OracleDriver (NameError)
第二种方法:Active Record
require 'rubygems'
gem 'ActiveRecord-JDBC'
require 'jdbc_adapter'
require 'active_record'
require 'active_record/version'
require "c:/ruby/jruby-1.2.0/lib/ojdbc14.jar" # should be redundant...
ActiveRecord::Base.establish_connection(
:adapter => 'jdbc',
:driver => 'oracle.jdbc.driver.OracleDriver',
:url => 'jdbc:oracle:thin:@myhost:1521:mydb',
:username=>'myuser',
:password=>'mypassword'
)
ActiveRecord::Base.connection.execute("SELECT * FROM mytable")
这样的结果是:
C:/ruby/jruby-1.2.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.1/lib/active_recordconnection_adapters/jdbc_adapter.rb:330:in `initialize':
The driver encountered an error: cannot load Java class oracle.jdbc.driver.OracleDriver (RuntimeError)
无论我如何处理,基本上都是同样的错误。
我使用的是 JRuby 1.2.0,我的 JRuby lib 目录中有 ojdbc14.jar
宝石:
ActiveRecord-JDBC (0.5) activerecord-jdbc-适配器 (0.9.1) 活动记录 (2.2.2)我错过了什么?
谢谢,
【问题讨论】:
我很想看看 SO 能否击败 ruby 论坛 (ruby-forum.com/topic/184414) 最初发布到 Nabble nabble.com/Having-problems-accessing-Oracle-td23070394.html 我猜他们不知何故被传播到 Ruby 论坛... 【参考方案1】:原来我的 ojdbc14.jar 文件已损坏。
此外,jar 文件必须位于 jruby/lib 目录中。仅仅将它放在类路径中是行不通的。
【讨论】:
最近出现在(jruby 特定的)CLASSPATH 环境变量中也足够了,但是仅仅做一个 require 'ojdbc14.jar' 是不行的。 似乎现在你只需要需要 jar,它不再必须在 lib 目录中(1.6.0RC2)【参考方案2】: 需要'java' # 这个require不会将jdbc驱动jar加载到系统类路径中 需要“c:/ruby/jruby-1.2.0/lib/ojdbc14.jar” # 2 种加载类的方法(可能还有更多) # 1 java类名的ruby语法 Java::OracleJdbcDriver::OracleDriver # 2 使用线程上下文类加载器 java.lang.Class.forName("oracle.jdbc.driver.OracleDriver", true, java.lang.Thread.currentThread.getContextClassLoader) url = "jdbc:oracle:thin:@myhost:1521:mydb" 提出“即将连接...” con = java.sql.DriverManager.getConnection(url, "myuser", "mypassword"); 如果骗 把“连接好” 别的 提出“连接失败” 结尾【讨论】:
我现在正在使用您的示例,但我不明白我将如何运行命令。你能回复我吗?【参考方案3】:然后在创建后使用它:
b = con.create_statement rs=b.execute_query(“从 SYS.V_$VERSION 中选择 BANNER”) 而(rs.next()) pr rs.getObject(1) # 获取第一列 结尾 rs.close 以及如何处理 oracle 时间戳(例如,如果第 3 列是时间戳): >> rs.getObject(3).timestamp_value.to_string => “1970-01-01 00:00:01.0” >> Date.parse(rs.getObject(3).timestamp_value.to_string) # 或者你可以使用时间,比如 >> as_ruby_time= Date.parse(rs.getObject(3).timestamp_value.to_string).to_time #1.9有这个方法 # 或者 >> as_ruby_time = Time.at(0) + rs.getObject(3).timestamp_value.get_time【讨论】:
【参考方案4】:您是否安装了 Oracle 客户端?您可能至少需要来自客户端的 jdbc 驱动程序文件
【讨论】:
是的,但我认为这种“瘦”连接类型不需要它。 是的,罐子通常就足够了。以上是关于如何使用 JRuby 和 JDBC 连接到 Oracle的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 IntelliJ 和 JDBC 建立 SSH 隧道并连接到数据库?
如何使用 JDBC 连接到 SQL Server 2008 数据库?