作为最近迁移到我项目中最新的 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