2009-09-29 68 views
3

問題使用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? 非常感謝提前。

+0

您嘗試執行的查詢中的「SET rowcount 10」部分是? – 2010-01-21 07:42:59

回答

1

使用了一段時間了SYBASE司機通過@lollipopman這是要去有幫助的建議讓我一直但是當我構建更復雜的查詢時,我一直在遇到問題,所以我試圖重新審視原始問題,並且一個小時左右我就開始工作。

找到開源JTDS司機here

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數據庫可以幫助別人!

1

不完全相關的,但是這是需要什麼樣的使用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

我試過了,我可以連接到我的數據庫 - 謝謝lollipopman 對於閱讀此內容的任何人,您需要從Sybase網站下載驅動程序:http://www.sybase.com/products/allproductsa-z/softwaredeveloperkit/jconnect 註冊並下載檔案 - 您需要jTDS3.jar和jconn3.jar,它們可以在classes文件夾的檔案中找到。 我仍然希望使用ActiveRecord,並會繼續如何解決這個問題。 @lollipopman爲什麼DBI驅動程序?這是否給你更好的表現? – Spasm 2009-10-05 01:20:54

+0

很高興在這裏你得到它的工作,我沒有在rails上使用ruby,所以DBI足以滿足我的腳本需求。 – user183092 2009-10-05 12:57:05

+0

@lollipopman:雖然我使用rails,但這是針對每天運行一次的cron進程並填充將由rails應用程序使用的表。我只想在ruby腳本中使用活動記錄 正如我所說我現在有一些工作,現在母豬將繼續使用此路徑 – Spasm 2009-10-07 04:29:54

0

說明: 您在說「set rowcount」和「select」。這些是兩種不同的陳述 - 它們都得到結果,即使它是「0行」...所以你得到一個結果集。 嘗試單獨執行這些操作。

+0

同意這是部分的問題並已解決。我可以問你的建議,使用哪種方法返回結果集。我不斷得到一個FIXNUM對象即。一些結果。這對我來說都是非常實驗性的 – Spasm 2010-01-20 00:39:29

相關問題