2013-06-21 71 views
0

我试图把这个简单的MRI脚本工作在jRuby,但我得到下面的错误。 我安装了与我的MRI相同的宝石 我不想使用JDBC的Active Record,只是做一个简单的连接和查询,我该怎么办?jRuby:使用oracle数据库

C:\jruby-1.7.4\bin>jruby -S gem list --local 

.. 
ruby-oci8 (2.1.0 x86-mingw32) 
.. 

脚本

require 'oci8' 

$conn = OCI8.new('test','test','dbcm.cm_121') 

sql = %q{ 
    select * from table 
} 

$conn.exec(sql).fetch_hash do |r| 
    r.each {|key, value| puts "#{key} is #{value}"} 
    puts "" 
end 

$conn.logoff 

错误

C:\jruby-1.7.4\test>jruby fetch_sql.rb 
LoadError: no such file to load -- oci8lib_jruby191 
    require at org/jruby/RubyKernel.java:1054 
    require at C:/jruby-1.7.4/lib/ruby/shared/rubygems/custom_require.rb:36 
    (root) at C:/jruby-1.7.4/lib/ruby/gems/shared/gems/ruby-oci8-2.1.0-x86-mingw32/lib/oci8.rb:43 
    require at org/jruby/RubyKernel.java:1054 
    (root) at C:/jruby-1.7.4/lib/ruby/shared/rubygems/custom_require.rb:1 
    (root) at fetch_sql.rb:1 
+0

OCI8例子是C库..:我会使用基于Oracle JDBC驱动程序库。 – reto

回答

0

看来,这是不可能的,否则请让我们知道。 这里最短/最简单的,我可以生产使用JDBC

require 'java' 

#source: http://www.oracle.com/technetwork/articles/dsl/jruby-oracle11g-330825.html 

java_import 'oracle.jdbc.OracleDriver' 
java_import 'java.sql.DriverManager' 

begin 
    oradriver = OracleDriver.new 
    DriverManager.registerDriver oradriver 
    user = 'xxx' 
    passwd = 'xxx' 
    url = 'jdbc:oracle:thin:@xxxxxx:9999:xxxx' 
    conn = DriverManager.get_connection url, user, passwd 
    select_sql = "select * from resources" 
    select_stmt = conn.create_statement 
    rset = select_stmt.execute_query select_sql 
    while (rset.next) 
    puts " resource [#{rset.getInt(1)}, #{rset.getString(2)}]" 
    end 
rescue 
    puts "Failed executing Oracle demo from JRuby ", $!, "\n" 
ensure 
    select_stmt.close 
    conn.close_connection 
end