0

ウグイスで生成された jar を実行すると、「適切なドライバーが見つかりません」というエラーが表示されます。ただし、ルビーとして実行すると、コードは成功します。ドライバーをロードするコマンドは true を返すため、jar 内にある間でもドライバーをロードできると思われます。ただし、ドライバーが見つかりませんで DriverManager.get_connection がエラーになっている理由を理解できません。特にRubyから実行すると成功します。

呼び出されるRuby関数

def self.connect(opts)
    connection = nil
    begin
      driver = Jdbc::PostgreSQL.load_driver

      connection = DriverManager.get_connection("jdbc:postgresql://host:port/postgres", opts[:username], opts[:password])
      connection.auto_commit = false
    rescue
       puts $!, $@
       ... 
    end
    connection
  end

ルビーの実行

テスト接続成功

JAR の実行

jdbc に適したドライバーが見つかりません:postgresql://host:port/postgres java.sql.DriverManager.getConnection(DriverManager.java:602) java.sql.DriverManager.getConnection(DriverManager.java:185)

ウグイス.rb

含める宝石

config.gems += ["trollop", "builder", "jdbc-postgres"]

Ruby のインポート

必要、java_import

# All support libraries required to be included
[
  'java',
  'ostruct',
  'trollop',
  'logger',
  'fileutils',
  'yaml',
  'jdbc/postgres'
].each do |require_name|
  require require_name
end


 # All java imported namespaces
    [
        'java.sql.DriverManager'
    ].each do |namespace|
      java_import namespace
    end

失敗の原因となっている JAR に何かが入っていないようです。どんな提案でも大歓迎です。

4

2 に答える 2

1

jdbc-postgres Gem を削除し、特に PostgreSQL JDBC JAR を含めることで、これが機能するようになりました。関連する部分を抽出し、一般的なエラー処理と関数を省略しました。

require postgresql-9.3-1101.jdbc4.jar

Java::JavaClass.for_name "org.postgresql.Driver"
Java::JavaClass.for_name "java.util.Properties"

props = java.util.Properties.new
props.set_property :user, opts[:username]
props.set_property :password, opts[:password]

connection = org.postgresql.Driver.new.connect(get_jdbcurl(opts), props)
于 2014-03-21T11:38:55.070 に答える
0

Java::JavaClass.for_name Jdbc::PostgreSQL.driver_nameおそらくPostreSQLのドライバークラスは初期化されません(CP上にありますが、これまで誰も使用していません)...したがって、 (before DriverManager.get_connection)の何かを実行すると、それがDriverManager

于 2014-03-20T07:07:40.987 に答える