使用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变量,下降临时表和创建临时表以及填充,并从中选择。 使用松鼠SQL我可以执行一次,并取得结果。 使用DBI我无法做到这一点的一个执行,没有人知道如果我可以执行整个事情一次或我将不得不将其分割?

会有人能够给我任何帮助吗? 我使用JTDS是否正确? 提前谢谢了。

--------------解决方案-------------

我使用Sybase驱动程序的某个时候已作为建议的@lollipopman这是在得到去,但我建更复杂的查询我一直运行到的问题有帮助,所以我想回到原来的问题,并与一个小时左右我去它的工作。

在这里可以找到开源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'} )

这就是所有需要连接到您的Sybase数据库与JRuby和DBI

希望这可以帮助别人!

不完全相关,但这是使用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'} )

注意:您是说“设定的行数”和“选择”。 这是两个不同的语句 - 他们都获得结果,即使是“0行”......所以,你得到一个结果。 尝试单独执行的。

分类:JDBC 时间:2013-11-09 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.213 (s). 10 q(s)