Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java H2连接失败_Java_Oracle_Jdbc_H2 - Fatal编程技术网

Java H2连接失败

Java H2连接失败,java,oracle,jdbc,h2,Java,Oracle,Jdbc,H2,我正在尝试使用以下简单代码连接到本地H2数据库: Class.forName("org.h2.Driver"); Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", ""); 另一方面,我还使用自己的jdbc驱动程序连接到远程Oracle服务器。在我看来,两者可以共存,因为jdbc驱动程序是不同的,并且根据连接url使用正确的驱动程序。所以这不应该是我问题的根源 它失败,出现以下错误: or

我正在尝试使用以下简单代码连接到本地H2数据库:

    Class.forName("org.h2.Driver");
    Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
另一方面,我还使用自己的jdbc驱动程序连接到远程Oracle服务器。在我看来,两者可以共存,因为jdbc驱动程序是不同的,并且根据连接url使用正确的驱动程序。所以这不应该是我问题的根源

它失败,出现以下错误:

org.h2.jdbc.JdbcSQLException: File corrupted while reading record: "[16] stream data key:7 pos:11 remaining:0". Possible solution: use the recovery tool [90030-190]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.index.PageBtreeIndex.getPage(PageBtreeIndex.java:156)
    at org.h2.index.PageBtreeIndex.<init>(PageBtreeIndex.java:69)
    at org.h2.table.RegularTable.addIndex(RegularTable.java:234)
    at org.h2.store.PageStore.addMeta(PageStore.java:1738)
    at org.h2.store.PageStore.readMetaData(PageStore.java:1637)
    at org.h2.store.PageStore.recover(PageStore.java:1405)
    at org.h2.store.PageStore.openExisting(PageStore.java:367)
    at org.h2.store.PageStore.open(PageStore.java:288)
    at org.h2.engine.Database.getPageStore(Database.java:2464)
    at org.h2.engine.Database.open(Database.java:672)
    at org.h2.engine.Database.openDatabase(Database.java:269)
    at org.h2.engine.Database.<init>(Database.java:263)
    at org.h2.engine.Engine.openSession(Engine.java:65)
    at org.h2.engine.Engine.openSession(Engine.java:175)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:153)
    at org.h2.engine.Engine.createSession(Engine.java:136)
    at org.h2.engine.Engine.createSession(Engine.java:28)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:349)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
    at org.h2.Driver.connect(Driver.java:72)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
org.h2.jdbc.JdbcSQLException:文件在读取记录时损坏:“[16]流数据键:7位置:11剩余:0”。可能的解决方案:使用恢复工具[90030-190]
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
位于org.h2.message.DbException.get(DbException.java:179)
位于org.h2.message.DbException.get(DbException.java:155)
位于org.h2.index.PageBtreeIndex.getPage(PageBtreeIndex.java:156)
位于org.h2.index.PageBtreeIndex.(PageBtreeIndex.java:69)
位于org.h2.table.RegularTable.addIndex(RegularTable.java:234)
位于org.h2.store.PageStore.addMeta(PageStore.java:1738)
位于org.h2.store.PageStore.readMetaData(PageStore.java:1637)
位于org.h2.store.PageStore.recover(PageStore.java:1405)
位于org.h2.store.PageStore.openExisting(PageStore.java:367)
在org.h2.store.PageStore.open(PageStore.java:288)
位于org.h2.engine.Database.getPageStore(Database.java:2464)
位于org.h2.engine.Database.open(Database.java:672)
位于org.h2.engine.Database.openDatabase(Database.java:269)
位于org.h2.engine.Database.(Database.java:263)
位于org.h2.engine.engine.openSession(engine.java:65)
位于org.h2.engine.engine.openSession(engine.java:175)
位于org.h2.engine.engine.createSessionAndValidate(engine.java:153)
位于org.h2.engine.engine.createSession(engine.java:136)
位于org.h2.engine.engine.createSession(engine.java:28)
位于org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:349)
JdbcConnection(JdbcConnection.java:107)
JdbcConnection(JdbcConnection.java:91)
位于org.h2.Driver.connect(Driver.java:72)
位于java.sql.DriverManager.getConnection(DriverManager.java:664)
位于java.sql.DriverManager.getConnection(DriverManager.java:247)

我仍然可以使用在端口8082上运行的web控制台进行连接。

我找到了解决问题的方法:将连接url更改为

"jdbc:h2:tcp://localhost/~/test"
根据,有许多可用的URL表达式,下面是一些示例:

  • 嵌入式(本地)连接:
    • jdbc:h2:~/test
    • jdbc:h2:file:/data/sample
    • jdbc:h2:file:C:/data/sample
      (仅限Windows)
  • 内存中(命名):
    • jdbc:h2:mem:test\u mem
  • 服务器模式(远程连接)使用TCP/IP:
    • jdbc:h2:tcp://localhost/~/测试
    • jdbc:h2:tcp://dbserv:8084/~/sample
    • jdbc:h2:tcp://localhost/mem:test
还有很多其他的,请查看上面的链接以查看完整的列表