سؤال

مشكلة

أحاول إنشاء برنامج نصي صغير ل Ruby - وسيتم تشغيله باستخدام JRURY مرة واحدة يوميا - للاتصال بقاعدة بيانات Sybase ASE 12.5.4 وإجراء استعلام معقد.

في النهاية، أنوي القيام ببعض المعالجة على البيانات وإدراج البيانات الجديدة في جدول MySQL للاستخدام داخل تطبيق القضبان.

بيئة

  • Jruby v1.4.0.
  • Java v1.6.0_15.
  • على أوبونتو الكرمية

jruby تثبيت الأحجار الكريمة

  • Activerecord-JDBC-Adapter (0.9.1)
  • activerecord-2.3.4.

JRURY 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، إلخ لا شيء يعمل.

شيء آخر فيما يتعلق بالاستفسارات. الاستعلام الأصلي الخاص بي معقدة إلى حد ما، وأنا متغيرات decalre، وانخفاض الجداول المؤقتة وإنشاء جداول مؤقتة وكذلك ملء منها وحدد منها. باستخدام Squirrel SQL يمكنني التنفيذ مرة واحدة واكتساب نتيجة. باستخدام DBI لم أتمكن من القيام بذلك في تنفيذ واحد، هل يعرف أحد إذا كان بإمكاني تنفيذ الشيء بأكمله مرة واحدة أو هل يجب علي تقسيمه؟

هل سيكون أي شخص قادرا على إعطائي أي مساعدة من فضلك؟ هل أنا أستخدم JTDS بشكل صحيح؟ شكرا كثيرا مسبقا.

هل كانت مفيدة؟

المحلول

كنت أستخدم برامج تشغيل Sybase لبعض الوقت الذي اقترحه Lollipopman الذي كان مفيدا في الذهاب، لكن عندما أنشأت استفسارات أكثر تعقيدا، احتفظت بالمراكض حتى حاولت إعادة النظر في المشكلة الأصلية ومع ساعة أو نحو ذلك أذهب إليها وبعد

ابحث عن برامج تشغيل 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'} )

وهذا هو كل ما هو مطلوب للاتصال بقاعدة بيانات Sybase الخاصة بك مع JRURY و DBI

أمل أن هذا يساعد شخصاما!

نصائح أخرى

ليس ذات صلة بالكامل، ولكن هذا هو ما هو مطلوب عند استخدام 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" و "حدد". هذه عبارة عن بيانات مختلفة - كلاهما يحصل على النتائج، حتى لو كان "0 صفوف" ... حتى تحصل على نتائج. حاول تنفيذ تلك بشكل منفصل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top