2015-11-12 4 views
1

Я пытаюсь подключиться к локальной базе данных H2, используя простой код:соединения H2 терпит неудачу

Class.forName("org.h2.Driver"); 
    Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", ""); 

С другой стороны, я также подключить к отдаленному серверу Oracle со своим собственным драйвером JDBC. По моему мнению, оба могут жить вместе, так как драйверы 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) 

я все еще могу подключиться с помощью веб-консоли, которая работает на порту 8082.

ответ

2

Ну, я узнал, как решить мою проблему: изменить соединение URL для

"jdbc:h2:tcp://localhost/~/test" 
0

Согласно H2 Features • Database URL Overview, там уже много доступных выражений URL, here're некоторые примеры:

  • Embedded (местное) соединение:
    • jdbc:h2:~/test
    • jdbc:h2:file:/data/sample
    • jdbc:h2:file:C:/data/sample (только для Windows)
  • В памяти (названный):
    • jdbc:h2:mem:test_mem
  • Режим сервера (удаленные соединения) с использованием протокола TCP/IP:
    • jdbc:h2:tcp://localhost/~/test
    • jdbc:h2:tcp://dbserv:8084/~/sample
    • jdbc:h2:tcp://localhost/mem:test
  • ...

Есть много других, пожалуйста, проверьте приведенную выше ссылку, чтобы просмотреть полный список.

Смежные вопросы