从ActiveRecord JRuby访问java.sql.connection?

时间:2012-12-28 08:53:42

标签: ruby-on-rails activerecord jruby jxls

我正在使用Jruby和Rails 3以及jxls,这是一个用于在Excel中生成报告的Java库。

jxls API有一个ReportManagerImpl,它在构造函数中使用java.sql.Connection。

ReportManager reportManager = new ReportManagerImpl( conn, beans );

在我的非工作代码中,ReportQuery是一个ActiveRecord对象。 Jruby看起来像这样:

conn = ReportQuery.connection
rm = Java::NetSfJxlsReport::ReportManagerImpl.new(conn, params)

但ActiveRecord :: Base.connection不返回java.sql.Connection,而是返回ActiveRecord :: ConnectionAdapters :: JdbcAdapter。

如何从JRuby访问底层的java.sql.Connection对象?

我得到的错误信息是:

2012-12-28 17:28:08,000 [main] WARN org.apache.commons.jexl2.JexlEngine - ![3,149]: 'rm.exec('SELECT d.name depname, e.name empname, age, payment, bonus, birthDate FROM employee e, department d where d.id = e.depid order by age desc');' method invocation error org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `createStatement' for #<ActiveRecord::ConnectionAdapters::JdbcAdapter:0x13ba673> 

1 个答案:

答案 0 :(得分:0)

在ActiveRecord连接上使用。 jdbc_connection 方法来访问JRuby中的原始JDBC连接:

ActiveRecord::Base.connection.jdbc_connection