在我的groovy控制台中针对不同JVM(在同一主机上)的H2实例运行select语句时,不确定为什么会出现此错误。
def sql = Sql.newInstance("jdbc:h2:~/mydb", "sa", "", "org.h2.Driver")
println sql.rows("select * from MESSAGES")
org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: The handle is invalid"; "C:/Users/myhome/mydb.h2.db"; SQL statement:
select * from MESSAGES [90031-187]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.message.DbException.convertIOException(DbException.java:330)
at org.h2.store.FileStore.seek(FileStore.java:297)
at org.h2.store.PageStore.readPage(PageStore.java:1324)
at org.h2.store.PageStore.getPage(PageStore.java:749)
at org.h2.index.PageDataIndex.getPage(PageDataIndex.java:233)
....
答案 0 :(得分:0)
要从多个VM访问H2数据库,它必须以服务器模式运行。最简单的方法是使用AUTO_SERVER模式。只需在以下两个流程中使用此网址:jdbc:h2:~/mydb;AUTO_SERVER=TRUE
在AUTO_SERVER模式下,H2非常智能,可以在第一个虚拟机中启动服务器并在第二个虚拟机中连接到服务器,从而允许透明并发访问同一个数据库。