-1

作为最近迁移到我项目中最新的 H2 数据库 jar 的一部分,我遇到了一个连接问题。

它在我们项目中的工作方式是一个程序以服务器模式启动H2数据库并连接到数据库。同一 JVM 中的另一个程序使用 URL “jdbc:h2:tcp://localhost/myfolder/mydb;IGNORECASE=TRUE”并尝试使用 java.sql.DriverManager 创建与同一数据库的连接,即Connection conn = DriverManager.getConnection( this.url, this.user, this.password);

但是在我迁移到最新的 H2 jar 后,连接对象没有被创建(之前我们使用的是 1.2.147,它在那里工作正常)。经过一些分析,我可以缩小范围,如果我使用 H2 版本 1.3.156 或更低版本,此代码可以正常工作,但如果我开始使用 H2 版本 1.3.157 或更高版本,则不会为第二个程序创建连接。我检查了这两个版本的变更日志(http://www.softpedia.com/progChangelog/H2-Database-Engine-Changelog-30870.html),但我找不到任何可能对此有所启发的东西。请注意,我们的 H2 数据库不包含任何具有 BLOB/CLOB 列的表。

相同的原因可能是什么?

问候,阿迪亚

PS:异常堆栈跟踪:

org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException:
Connection refused: connect: localhost" [90067-174]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
        at org.h2.message.DbException.get(DbException.java:161)
        at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:417)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.jav
a:305)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:105)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:90)
        at org.h2.Driver.connect(Driver.java:73)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at com.avaya.induna.server.db.DBConnectionManagerImpl.getConnection(DBCo
nnectionManagerImpl.java:34)
        at com.avaya.induna.server.db.backup.BackupImplThread.takeBackup(BackupI
mplThread.java:313)
        at com.avaya.induna.server.db.backup.BackupImplThread.run(BackupImplThre
ad.java:175)
Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at org.h2.util.NetUtils.createSocket(NetUtils.java:119)
        at org.h2.util.NetUtils.createSocket(NetUtils.java:100)
        at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:100)
        at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:413)
        ... 9 more
4

1 回答 1

1

问题是 H2 版本 1.3.157(及更高版本)发生了变化,现在对启动 H2 TCP 服务器的参数进行了更严格的检查。这导致服务器无法启动。例如,在 H2 版本 1.3.156 及更早版本中,允许以下内容:

Server.createTcpServer("");

而在以后的版本中,这会失败。

于 2013-10-24T16:28:44.770 回答