使用 H2 数据库时有时会出现以下异常。如果我将数据库文件的路径更改为其他位置,这个问题就会得到解决。对于这个问题有什么永久的解决办法吗?我的数据库现在有 19.5MB。
org.h2.jdbc.JdbcSQLException: Database may be already in use: "/opt/new/mockdata_db.mv.db". Possible solutions: close all other connection(s
); use the server mode [90020-178]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) ~[h2-1.4.178.jar:1.4.178]
at org.h2.message.DbException.get(DbException.java:167) ~[h2-1.4.178.jar:1.4.178]
at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:104) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.getPageStore(Database.java:2355) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.open(Database.java:659) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.openDatabase(Database.java:262) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.<init>(Database.java:256) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.openSession(Engine.java:57) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.openSession(Engine.java:164) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.createSession(Engine.java:125) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.createSession(Engine.java:27) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:335) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91) ~[h2-1.4.178.jar:1.4.178]
at org.h2.Driver.connect(Driver.java:74) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcDataSource.getJdbcConnection(JdbcDataSource.java:191) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcDataSource.getXAConnection(JdbcDataSource.java:354) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcDataSource.getPooledConnection(JdbcDataSource.java:386) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcConnectionPool.getConnectionNow(JdbcConnectionPool.java:228) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcConnectionPool.getConnection(JdbcConnectionPool.java:200) ~[h2-1.4.178.jar:1.4.178]
Run Code Online (Sandbox Code Playgroud)
一种永久的解决方案是在堆栈跟踪中:使用服务器模式而不是嵌入式模式。这意味着更改代码中的 JDBC url 并在 JDBC 中使用 tcp 模式。
一个有趣的替代方案是以自动混合模式打开:第一个连接是嵌入的,所有后续连接都处于 tcp 模式。这也改变了 JDBC url,但看起来更自然,我个人在 H2 1.3 和 1.4 版本中系统地使用了它。
只需附加";AUTO_SERVER=TRUE"到之前的 JDBC url 即可使用自动混合模式。
| 归档时间: |
|
| 查看次数: |
7131 次 |
| 最近记录: |