6

最初のアプローチ: ベアメタル

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)

2 番目のアプローチ: アクティブ レコード

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-adapter (0.9.1)
  • アクティブレコード (2.2.2)

私は何が欠けていますか?

ありがとう、

4

4 に答える 4

5

私のojdbc14.jarファイルが壊れていたことがわかりました。

さらに、jarファイルはjruby/libディレクトリになければなりません。クラスパスにそれを置くだけでは機能しません。

于 2009-04-20T00:50:25.883 に答える
5
「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"
puts 「接続しようとしています...」
con = java.sql.DriverManager.getConnection(url, "myuser", "mypassword");
詐欺なら
    「接続良好」を置きます
そうしないと
    「接続に失敗しました」と表示されます
終わり
于 2010-06-03T05:42:07.137 に答える
3

作成後にそれを使用するには:

b = con.create_statement
rs=b.execute_query(“SYS.V_$VERSIONからBANNERを選択”)
while(rs.next())
  p 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

于 2011-02-18T00:08:13.027 に答える
0

Oracle クライアントをインストールしましたか? おそらく、少なくともクライアントからの jdbc ドライバー ファイルが必要です。

于 2009-04-16T08:27:44.947 に答える