问题

我正在尝试构建一个小的红宝石脚本(每天使用Jruby一次运行),以连接到Sybase ASE 12.5.4数据库并执行复杂的查询。

最终,我打算对数据进行一些处理,并将新数据插入MySQL表中,以在Rails应用程序中使用。

环境

  • Jruby v1.4.0
  • Java V1.6.0_15
  • 在Ubuntu业力上

jruby安装了宝石

  • Activerecord-JDBC-Adapter(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 --)

我可以确认连接到DB。尽管我遇到了问题,只是从数据库表中选择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等无关紧要。

关于查询的另一件事。我的原始查询非常复杂,我去删除变量,丢弃临时表并创建临时表以及填充并从中选择。使用松鼠SQL我可以执行一次并获得结果。使用DBI,我无法一次执行此操作,有人知道我是否只能执行整个事情,还是我必须将其分开?

有人可以给我任何帮助吗?我是否正确使用JTD?提前谢谢了。

有帮助吗?

解决方案

正如@lollipopman的建议,我一直在使用Sybase驱动程序,这有助于前进,但是当我建立更复杂的查询时,我一直遇到问题,因此我试图重新审视原始问题,并且一个小时或一个小时,所以我可以使用它。 。

查找开源JTDS驱动程序 这里

require java
require jtds-1.2.5.jar
require rubygems
require dbi

dbh = DBI.connect('dbi:Jdbc:jtds:sybase://<host>:<port>/<db>', <username>, <password>, {'driver' => 'net.sourceforge.jtds.jdbc.Driver'} )

这就是与Jruby和DBI连接到SYBASE数据库所需的全部

希望这对某人有帮助!

其他提示

并不完全相关,但是当使用Jruby,Sybase JDBC和DBI时,这是必需的:

require 'java'
require './jars/jTDS3.jar'
require './jars/jconn3.jar'
require "rubygems"
require "dbi"

dbh = DBI.connect('dbi:Jdbc:sybase:Tds:foobar:2460/testdb', 'sa', 'password',
  {'driver' => 'com.sybase.jdbc3.jdbc.SybDriver'} )

注意:您说的是“ SET ROWCOUNT”和“ SELECT”。这是两个不同的语句 - 即使是“ 0行”,它们都会得到结果……因此您将获得结果集。尝试单独执行这些。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top