问题使用Sybase ASE 12.5.4与JTDS驱动程序使用JRuby
我试图建立一个小型的Ruby脚本 - 将使用JRuby每天一次运行 - 连接到的Sybase ASE 12.5.4数据库并执行一个复杂的查询。
最终,我打算对数据做一些处理,并将新数据插入到MySQL表中以便在Rails应用程序中使用。
环境
- 的jruby V1.4.0
- 的java v1.6.0_15
- 在Ubuntu业报
JRuby的安装宝石
- 的ActiveRecord-JDBC适配器(0.9.1)
- 的ActiveRecord-2.3.4
JRuby的lib目录
- JTDS-1.2.5
查询
SET rowcount 10
SELECT * FROM TEST_TABLE
代码段
require 'java'
require 'jtds-1.2.5.jar'
require 'rubygems'
require 'active_record'
config = {
:username => 'railstest',
:password => 'railstest',
:adapter => 'jdbc',
:dialect => 'sybase',
:host => 'localhost',
:database => 'railstest',
:port => '5000',
:driver => 'net.sourceforge.jtds.jdbc.Driver',
:url => 'jdbc:jtds:sybase://localhost:5000/railstest'
}
ActiveRecord::Base.establish_connection(config).connection.execute(-- QUERY --)
我可以证实这一点连接到数据库。尽管我只是从数据库表中选择了10行,但遇到了问题。
可生产
对于执行方法:
/usr/local/bin/jruby-1.4.0/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:219:in `log': ActiveRecord::ActiveRecordError: The executeUpdate method must not return a result set.: SET rowcount 10 SELECT * FROM TEST_TABLE (ActiveRecord::StatementInvalid)
from /usr/local/bin/jruby-1.4.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.2/lib/active_record/connection_adapters/jdbc_adapter.rb:559:in `execute'
from db-test.rb:21
对于select_rows方法:
/usr/local/bin/jruby-1.4.0/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:219:in `log': ActiveRecord::ActiveRecordError: The executeUpdate method must not return a result set.: SET rowcount 10 SELECT * FROM TEST_TABLE (ActiveRecord::StatementInvalid)
from /usr/local/bin/jruby-1.4.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.2/lib/active_record/connection_adapters/jdbc_adapter.rb:559:in `execute'
from /usr/local/bin/jruby-1.4.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.2/lib/active_record/connection_adapters/jdbc_adapter.rb:629:in `select'
from /usr/local/bin/jruby-1.4.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.2/lib/active_record/connection_adapters/jdbc_adapter.rb:550:in `select_rows'
from db-test.rb:21
的错误状态,我不应该返回结果集,但它哪种方法无关紧要我使用,执行,select_rows等没有任何作品。
关于查询还有一件事。我原来的查询是相当复杂的,我decalre变量,删除临时表和创建临时表以及填充和选择它们。使用Squirrel SQL,我可以执行一次并获得结果。使用DBI我无法在一次执行中执行此操作,是否有人知道我是否可以只执行一次该操作,还是必须将其分开?
任何人都可以给我任何援助吗?我是否正确使用jTDS? 非常感谢提前。
您尝试执行的查询中的“SET rowcount 10”部分是? – 2010-01-21 07:42:59