質問

問題

Sybase ASE 12.5.4データベースに接続して複雑なクエリを実行するために、1日1回Jrubyを使用して実行される小さなRubyスクリプトを作成しようとしています。

最終的に、データでいくつかの処理を行い、Railsアプリケーション内で使用するためにMySQLテーブルに新しいデータを挿入するつもりです。

環境

  • Jruby v1.4.0
  • Java V1.6.0_15
  • Ubuntu Karmicで

Jrubyは宝石をインストールしました

  • ActivereCord-JDBC-Adapter(0.9.1)
  • ActiverCord-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などは何も機能しないかは問題ではないことを示しています。

クエリに関するもう1つのこと。私の元のクエリはかなり複雑です。私は変数をデカールし、一時テーブルをドロップし、一時テーブルを作成し、それらから選択して選択します。リスSQLを使用して、1回実行して結果を得ることができます。 DBIを使用して、1回の実行でこれを行うことができませんでしたが、誰もが1回だけ実行できるかどうかを知っていますか、それとも分割する必要がありますか?

誰かが私に何か助けを与えることができますか? 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'} )

注:「rowcount」と「select」と言っています。これらは2つの異なるステートメントです。たとえ「0行」であっても、両方とも結果を得るため、結果が得られます。それらを個別に実行してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top