Frage

Problem

Ich versuche, ein kleines Ruby -Skript zu erstellen, das einmal am Tag mit JRUBY ausgeführt wird, um eine Verbindung zu einer Sybase ASE 12.5.4 -Datenbank herzustellen und eine komplexe Abfrage auszuführen.

Letztendlich beabsichtige ich, die Daten zu verarbeiten und die neuen Daten in einer MySQL -Tabelle für die Verwendung innerhalb einer Rails -Anwendung einzulegen.

Umfeld

  • Jruby v1.4.0
  • Java v1.6.0_15
  • auf Ubuntu Karmic

Jruby installierte Edelsteine

  • ActivereCord-JDBC-Adapter (0.9.1)
  • Activerecord-2.3.4

Jruby Lib Directory

  • JTDS-1.2.5

Anfrage

SET rowcount 10 
SELECT * FROM TEST_TABLE

Code-Auszug

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 --)

Ich kann bestätigen, dass dies eine Verbindung zum DB verbindet. Obwohl ich Probleme habe, nur 10 Zeilen aus einer Datenbanktabelle auszuwählen.

Produziert

Zum ausführen Methode:

/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

Zum select_rows Methode:

/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

Der Fehler besagt, dass ich keine Ergebnisseset zurückgeben sollte, aber es spielt keine Rolle, welche Methode ich verwende, ausführen, select_rows usw. nichts funktioniert.

Eine weitere Sache in Bezug auf Fragen. Meine ursprüngliche Abfrage ist ziemlich komplex, ich entschließt Variablen, lasse temporäre Tabellen ab und erstelle temporäre Tabellen sowie aus der Fülle und wähle daraus. Mit Squirrel SQL kann ich einmal ausführen und ein Ergebnis erzielen. Mit DBI konnte ich dies in einer Ausführung nicht tun. Weiß jemand, ob ich das Ganze nur einmal ausführen kann, oder muss ich es aufteilen?

Würde mir jemand bitte Hilfe geben können? Verwende ich JTDs richtig? Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich hatte die Sybase -Treiber für einige Zeit verwendet, wie von @lollipopman vorgeschlagen, was hilfreich war, um loszulegen, aber als ich komplexere Fragen aufbaute, habe ich immer wieder Probleme .

Finden Sie die Open Source JTDS -Treiber hier

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'} )

Und das ist alles, was erforderlich ist, um eine Verbindung zu Ihrer Sybase -Datenbank mit JRUBY und DBI herzustellen

Hoffe das hilft jemandem!

Andere Tipps

Nicht ganz relevant, aber dies ist erforderlich, was bei der Verwendung von JRUBY, SYBASE JDBC und DBI erforderlich ist:

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'} )

Hinweis: Sie sagen "ROWCount" und "Select". Dies sind zwei verschiedene Aussagen - beide erhalten Ergebnisse, auch wenn es sich um "0 Zeilen" handelt ... Sie erhalten also ein Ergebnis. Versuchen Sie, diese separat auszuführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top