Question

Problème

Je suis en train de construire un petit script Ruby - qui sera exécuté à l'aide JRuby une fois par jour - de se connecter à une base de données Sybase ASE 12.5.4 et d'effectuer une requête complexe.

En fin de compte, je l'intention de faire un peu de traitement des données et insérer les nouvelles données dans une table MySQL pour une utilisation dans une application de rails.

Environnement

  • JRuby 1.4.0
  • java v1.6.0_15
  • sur Ubuntu Karmic

JRuby gemmes installées

  • activerecord-jdbc-adaptateur (0.9.1)
  • activerecord-2.3.4

Répertoire JRuby Lib

  • jtds-1.2.5

requête

SET rowcount 10 
SELECT * FROM TEST_TABLE

Code Snippet

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

Je peux le confirmer se connecte au DB. Bien que j'ai des problèmes simplement sélectionner 10 lignes d'une table de base de données.

Produit

execute méthode:

/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 Méthode:

/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

Les états d'erreur que je ne devrais pas retourner un jeu de résultats mais peu importe la méthode que j'utilise, exécuter, etc select_rows rien ne fonctionne.

Une autre chose en ce qui concerne les requêtes. Ma requête initiale est assez complexe, je decalre des variables, laisse tomber des tables temporaires et de créer des tables temporaires ainsi que Populate et choisir parmi eux. En utilisant Squirrel SQL je peux exécuter une fois et d'obtenir un résultat. DBI Je ne pouvais pas le faire en une seule exécution, personne ne sait si je peux exécuter la chose une fois ou je vais devoir le diviser?

Quelqu'un pourrait me donner une aide s'il vous plaît? Suis-je utiliser jTDS correctement? Merci d'avance.

Était-ce utile?

La solution

J'avais utilisé les pilotes Sybase pour quelque temps comme suggéré par @lollipopman qui était utile pour obtenir d'aller, mais comme je l'ai construit des requêtes plus complexes que je rencontrais des problèmes alors j'ai essayé de revenir sur le problème d'origine et avec une heure ou je allez fonctionner.

Trouvez les JTDS open source pilotes

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

Et c'est tout ce qui est nécessaire pour se connecter à votre base de données Sybase avec JRuby et DBI

Espérons que cela aide quelqu'un!

Autres conseils

pas tout à fait pertinent, mais c'est ce qui est nécessaire lors de l'utilisation JRuby, jdbc sybase et 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'} )

Note: vous dites « set rowcount » et « sélectionner ». Ce sont deux déclarations différentes - ils ont tous deux obtenir des résultats, même si elle est « 0 lignes » ... Donc, vous obtenez un jeu de résultats. Essayez d'exécuter les séparément.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top