我找到了一个没有找到合适的驱动程序'运行使用warbler生成的jar时出错。但是,当我以ruby运行它时,代码成功了。加载驱动程序的命令返回true,这使我相信它仍然可以在jar中加载驱动程序。但是,我无法弄清楚为什么DriverManager.get_connection在找不到驱动程序时发生错误。特别是因为从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
测试连接成功
找不到合适的驱动程序 JDBC:在PostgreSQL://主机:端口/ Postgres的 java.sql.DriverManager.getConnection(DriverManager.java:602) java.sql.DriverManager.getConnection(DriverManager.java:185)
要包含的宝石
config.gems += ["trollop", "builder", "jdbc-postgres"]
require,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。任何建议都将不胜感激。
答案 0 :(得分: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)
答案 1 :(得分:0)
可能PostreSQL的驱动程序类没有被初始化(它在CP上,但到目前为止还没有人使用它)...因此做一些Java::JavaClass.for_name Jdbc::PostgreSQL.driver_name
(在DriverManager.get_connection
之前)会将其注册到DriverManager