3

连接到数据库时出现以下异常:

org.h2.jdbc.JdbcSQLException: Connection is broken: "connect timed out" [90067-142]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:156)
    at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:326)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:248)
    at org.h2.engine.SessionRemote.createSession(SessionRemote.java:214)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:111)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:95)
    at org.h2.Driver.connect(Driver.java:73)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
................
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:525)
    at org.h2.util.NetUtils.createSocket(NetUtils.java:109)
    at org.h2.util.NetUtils.createSocket(NetUtils.java:91)
    at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:92)
    at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:322)
    ... 38 more

连接字符串如下所示:

jdbc:h2:C:\Users\Michael\.myadd\db;AUTO_SERVER=TRUE;CIPHER=AES

这种异常的原因是什么?

谢谢!

4

3 回答 3

3

对于 h2,默认连接池大小为 10,登录超时时间为 30 秒,如果我们在较长时间内同时获取 10 个连接,则获取连接的新请求将超时。对于我的情况,发现由于代码中的错误,连接没有关闭。我们可以增加最大连接数。

connectionPool.setMaxConnections(20);

但默认情况下,数据库管理器是单线程的,因此更多的连接不会获得任何性能。

于 2015-10-14T19:43:41.947 回答
1

我猜您阅读了有关自动混合模式的文档?很难说问题是什么,因为对我来说它有效。你能发布文件 C:\Users\Michael.myadd\db.lock.db 的内容吗?对我来说是(连接后):

#FileLock
#Tue Dec 14 22:29:22 CET 2010
id=12ce6c9a16a912077e514cc6fff231e91b09d2dbe43
method=file
server=192.168.0.126\:52068

这意味着数据库是打开的,打开它的客户端在这个 IP 地址和端口上启动了一个服务器。

于 2010-12-14T21:33:21.827 回答
0

先重启电脑(^_^)/再启动</p>

我尝试了所有方法,但似乎唯一可行的方法是重新启动计算机。

这是不起作用的事情的列表:

  1. 刷新项目和maven
  2. 关闭和打开应用程序
  3. 调整代码

我什至可以在 H2 控制台中看到数据库工作正常,但是 eclipse 在我重新启动计算机之前不会连接到它。

我多次记录此错误:“连接:org.h2.jdbc.JdbcSQLNonTransientConnectionException:连接断开:“java.net.SocketTimeoutException:连接超时:...”

我在午餐前重新启动连接到数据库,并在我的电脑上工作了一个小时。午饭都睡了,下午我不得不再次重启电脑才能连接到数据库。

其他评论是关于的MaxConnections,但我是唯一一个使用这个数据库的人。

于 2021-06-19T21:58:05.267 回答