문제

문제

Sybase ASE 12.5.4 데이터베이스에 연결하고 복잡한 쿼리를 수행하기 위해 하루에 한 번 JRUBY를 사용하여 실행되는 작은 Ruby 스크립트를 작성하려고합니다.

궁극적으로 데이터에 대한 처리를 수행하고 Rails 응용 프로그램 내에서 사용하기 위해 MySQL 테이블에 새 데이터를 삽입하려고합니다.

환경

  • Jruby v1.4.0
  • Java v1.6.0_15
  • 우분투 업장에서

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