Как подключиться к Oracle, используя JRuby & JDBC - PullRequest
6 голосов
/ 16 апреля 2009

Первый подход: голый металл

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)

Второй подход: Активная запись

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 и у меня есть ojdbc14.jar в моем каталоге JRuby lib

Драгоценные камни:

  • ActiveRecord-JDBC (0,5)
  • activerecord-jdbc-адаптер (0.9.1)
  • activerecord (2.2.2)

Чего мне не хватает?

Спасибо

Ответы [ 4 ]

5 голосов
/ 20 апреля 2009

Оказывается, мой файл ojdbc14.jar поврежден.

Кроме того, файл jar ДОЛЖЕН быть в каталоге jruby / lib. Просто иметь его на пути к классам не работает.

5 голосов
/ 03 июня 2010
require 'java'

# This require doesn't load the jdbc driver jar into the system class path
require "c:/ruby/jruby-1.2.0/lib/ojdbc14.jar" 

# 2 ways you can load the class (There are probably more)

# 1 ruby syntax for java class name
Java::OracleJdbcDriver::OracleDriver

# 2 Use the thread context class loader
java.lang.Class.forName("oracle.jdbc.driver.OracleDriver", true, java.lang.Thread.currentThread.getContextClassLoader)


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
3 голосов
/ 18 февраля 2011

и затем использовать его после создания:

b = con.create_statement
rs=b.execute_query(“select BANNER from SYS.V_$VERSION”)
while(rs.next())
  p rs.getObject(1) # get first column
end
rs.close

and how to deal with oracle timestamps (if column 3 is a timestamp, for example):

>> rs.getObject(3).timestamp_value.to_string
=> “1970-01-01 00:00:01.0″
>> Date.parse(rs.getObject(3).timestamp_value.to_string)
# or you can use time, like
>> as_ruby_time= Date.parse(rs.getObject(3).timestamp_value.to_string).to_time # 1.9 has this method
# or
>> as_ruby_time = Time.at(0) + rs.getObject(3).timestamp_value.get_time

0 голосов
/ 16 апреля 2009

У вас установлен клиент Oracle? вам, вероятно, нужны как минимум файлы драйвера jdbc с клиента

...