2015-05-17 16 views
8

mam skonfigurowany mojej bazy danych H2 następująco:Łączenie z serwerem H2 z DbVisualizer

@Configuration 
@Profile({ Profiles.DEV }) 
public class DevDataSourceConfiguration { 

    @Bean(initMethod = "start", destroyMethod = "stop") 
    public Server h2WebServer() throws SQLException { 
     return Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082"); 
    } 

    @Bean(initMethod = "start", destroyMethod = "stop") 
    @DependsOn("h2WebServer") 
    public Server h2Server() throws SQLException { 
     return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092"); 
    } 

    @Bean 
    @DependsOn("h2Server") 
    public DataSource datasource() { 
     HikariDataSource ds = new HikariDataSource(); 
     ds.setDriverClassName("org.h2.Driver"); 
     ds.setJdbcUrl("jdbc:h2:tcp://localhost/~/bignibou"); 
     return ds; 
    } 
} 

Jestem teraz próbuje uzyskać dostępu do bazy danych z DbVisualizer stosując następujący jdbc URL: jdbc:h2:tcp://localhost/~/bignibou i pojawia się następujący błąd w dbvis kłody:

2015-05-17 17:02:24.544 WARN 595 [ExecutorRunner-pool-3-thread-11 - G.ᅣテ] Could not setAutoCommit(true) for: bignibou 
org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-176] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) 
    at org.h2.message.DbException.get(DbException.java:178) 
    at org.h2.message.DbException.get(DbException.java:154) 
    at org.h2.engine.SessionRemote.done(SessionRemote.java:621) 
    at org.h2.command.CommandRemote.prepare(CommandRemote.java:69) 
    at org.h2.command.CommandRemote.<init>(CommandRemote.java:46) 
    at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:476) 
    at org.h2.engine.SessionRemote.setAutoCommitSend(SessionRemote.java:243) 
    at org.h2.engine.SessionRemote.setAutoCommit(SessionRemote.java:210) 
    at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:431) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.onseven.dbvis.h.B.C.ᅣチ(Z:2206) 
    at com.onseven.dbvis.h.B.F$A.call(Z:2515) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
2015-05-17 17:02:24.546 INFO 595 [ExecutorRunner-pool-3-thread-11 - AbstractFacade.getCatalog] Could not getCatalog for: bignibou 
org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-176] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) 
    at org.h2.message.DbException.get(DbException.java:178) 
    at org.h2.message.DbException.get(DbException.java:154) 
    at org.h2.engine.SessionRemote.done(SessionRemote.java:621) 
    at org.h2.command.CommandRemote.prepare(CommandRemote.java:69) 
    at org.h2.command.CommandRemote.<init>(CommandRemote.java:46) 
    at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:476) 
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188) 
    at org.h2.jdbc.JdbcConnection.getCatalog(JdbcConnection.java:598) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.onseven.dbvis.h.B.C.ᅣチ(Z:2206) 
    at com.onseven.dbvis.h.B.F$A.call(Z:2515) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

edit: Oto wynik dziennika uzyskać po dodaniu ;trace_level_system_out=3 do adresu URL połączenia:

2015-05-26 12:25:13.601 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/Connection conn1 = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/bignibou;trace_level_system_out=3", "", ""); 
2015-05-26 12:25:13.602 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/DatabaseMetaData dbMeta1 = conn1.getMetaData(); 
2015-05-26 12:25:13.602 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.setAutoCommit(true); 
2015-05-26 12:25:13.602 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: SESSION_PREPARE_READ_PARAMS 0 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: exception 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-176] 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.message.DbException.get(DbException.java:178) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.message.DbException.get(DbException.java:154) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.engine.SessionRemote.done(SessionRemote.java:621) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.command.CommandRemote.prepare(CommandRemote.java:69) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.command.CommandRemote.<init>(CommandRemote.java:46) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:476) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.engine.SessionRemote.setAutoCommitSend(SessionRemote.java:243) 
2015-05-26 12:25:13.603 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.engine.SessionRemote.setAutoCommit(SessionRemote.java:210) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:431) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at java.lang.reflect.Method.invoke(Method.java:497) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at com.onseven.dbvis.h.B.C.ᅣチ(Z:2206) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at com.onseven.dbvis.h.B.F$A.call(Z:2515) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
2015-05-26 12:25:13.604 INFO 159 [pool-3-thread-8 - Q.flush] at java.lang.Thread.run(Thread.java:745) 
2015-05-26 12:25:13.604 WARN 159 [ExecutorRunner-pool-2-thread-2 - G.ᅣテ] Could not setAutoCommit(true) for: bignibou 
org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-176] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) 
    at org.h2.message.DbException.get(DbException.java:178) 
    at org.h2.message.DbException.get(DbException.java:154) 
    at org.h2.engine.SessionRemote.done(SessionRemote.java:621) 
    at org.h2.command.CommandRemote.prepare(CommandRemote.java:69) 
    at org.h2.command.CommandRemote.<init>(CommandRemote.java:46) 
    at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:476) 
    at org.h2.engine.SessionRemote.setAutoCommitSend(SessionRemote.java:243) 
    at org.h2.engine.SessionRemote.setAutoCommit(SessionRemote.java:210) 
    at org.h2.jdbc.JdbcConnection.setAutoCommit(JdbcConnection.java:431) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.onseven.dbvis.h.B.C.ᅣチ(Z:2206) 
    at com.onseven.dbvis.h.B.F$A.call(Z:2515) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
2015-05-26 12:25:13.605 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.isClosed(); 
2015-05-26 12:25:13.605 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.getAutoCommit(); 
2015-05-26 12:25:13.608 INFO 159 [ExecutorRunner-pool-2-thread-2 - Q.flush] 05-26 12:25:13 jdbc: 
/**/dbMeta1.getSearchStringEscape(); 
2015-05-26 12:25:13.608 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.isClosed(); 
2015-05-26 12:25:13.608 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.getAutoCommit(); 
2015-05-26 12:25:13.608 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.getCatalog(); 
2015-05-26 12:25:13.608 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: SESSION_PREPARE_READ_PARAMS 1 
2015-05-26 12:25:13.608 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: exception 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-176] 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.message.DbException.get(DbException.java:178) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.message.DbException.get(DbException.java:154) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.engine.SessionRemote.done(SessionRemote.java:621) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.command.CommandRemote.prepare(CommandRemote.java:69) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.command.CommandRemote.<init>(CommandRemote.java:46) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:476) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at org.h2.jdbc.JdbcConnection.getCatalog(JdbcConnection.java:598) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at java.lang.reflect.Method.invoke(Method.java:497) 
2015-05-26 12:25:13.609 INFO 159 [pool-3-thread-8 - Q.flush] at com.onseven.dbvis.h.B.C.ᅣチ(Z:2206) 
2015-05-26 12:25:13.610 INFO 159 [pool-3-thread-8 - Q.flush] at com.onseven.dbvis.h.B.F$A.call(Z:2515) 
2015-05-26 12:25:13.610 INFO 159 [pool-3-thread-8 - Q.flush] at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
2015-05-26 12:25:13.610 INFO 159 [pool-3-thread-8 - Q.flush] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
2015-05-26 12:25:13.610 INFO 159 [pool-3-thread-8 - Q.flush] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
2015-05-26 12:25:13.610 INFO 159 [pool-3-thread-8 - Q.flush] at java.lang.Thread.run(Thread.java:745) 
2015-05-26 12:25:13.610 INFO 159 [ExecutorRunner-pool-2-thread-2 - AbstractFacade.getCatalog] Could not getCatalog for: bignibou 
org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-176] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) 
    at org.h2.message.DbException.get(DbException.java:178) 
    at org.h2.message.DbException.get(DbException.java:154) 
    at org.h2.engine.SessionRemote.done(SessionRemote.java:621) 
    at org.h2.command.CommandRemote.prepare(CommandRemote.java:69) 
    at org.h2.command.CommandRemote.<init>(CommandRemote.java:46) 
    at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:476) 
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188) 
    at org.h2.jdbc.JdbcConnection.getCatalog(JdbcConnection.java:598) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.onseven.dbvis.h.B.C.ᅣチ(Z:2206) 
    at com.onseven.dbvis.h.B.F$A.call(Z:2515) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
2015-05-26 12:25:13.611 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.isClosed(); 
2015-05-26 12:25:13.611 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/conn1.getAutoCommit(); 
2015-05-26 12:25:13.611 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/Statement stat1 = conn1.createStatement(); 
2015-05-26 12:25:13.611 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: 
/**/ResultSet rs1 = stat1.executeQuery("call schema()"); 
2015-05-26 12:25:13.611 INFO 159 [pool-3-thread-8 - Q.flush] 05-26 12:25:13 jdbc: SESSION_PREPARE_READ_PARAMS 2 

edit 2: Zauważyłem też to (w dziennikach konsoli aplikacji):

05-26 12:25:13 database: connecting session #14 to /Users/julien/bignibou 
05-26 12:25:13 jdbc[14]: 
/*SQL */SET TRACE_LEVEL_SYSTEM_OUT 3; 
05-26 12:29:04 jdbc[13]: 
/*SQL */ROLLBACK; 
05-26 12:29:04 jdbc[14]: 
/*SQL */ROLLBACK; 
05-26 12:29:04 database: disconnecting session #14 
05-26 12:29:04 database: disconnected session #14 
05-26 12:29:04 database: disconnecting session #13 
05-26 12:29:04 database: disconnected session #13 
+0

Dołączanie "; trace_level_system_out = 3" tymczasowo do adresu URL bazy danych może pomóc w celu debugowania –

+0

HI AydinK: Edytowałem mój wpis. – balteo

+0

DBVisualizer jest zaimplementowany w Javie. Czy możesz połączyć się z bazą danych za pomocą zwykłego starego jdbc? – Grasshopper

Odpowiedz

12
  • Najnowsza wersja stabilna H2: 1.3.176.
  • Ostatni sterownik dbVisualizer H2: 1.3.176.

Prawdopodobnie używasz wersji beta H2 (1.4.x) z pewnym błędem w komunikacji klient/serwer (wersje niedopasowanie nie powinno być problemu, ponieważ klient i serwer negocjują która wersja protokołu używać) spróbuj użyć najnowszej wersji beta z H2 lub użyj najnowszej stabilnej wersji H2.

+0

To było to: musiałem zmienić się z wersji 1.4.xx na 1.3.176 i teraz działa dobrze. – balteo

+1

Miło mi pomóc, okrzyki. – vzamanillo

3

Sprawdź wersję sterownika h2 JDBC używanego w DbVisualizer. W szczególności sprawdź, czy pasuje do wersji, której używasz na serwerze. Chociaż zwykle nie powinno mieć znaczenia, że ​​wersje są zgodne, wystąpiły problemy z H2, które spowodowałyby tego rodzaju błędy podczas korzystania z niedopasowanych wersji.

Jeśli to nie pomoże, możesz również dokładnie zgłosić wersję H2, z której korzystasz zarówno na kliencie, jak i na serwerze.

+0

Jest kruchy. Jeśli sterownik H2 JDBC nie pasuje do sterownika po stronie serwera, może pojawić się komunikat o błędzie "Połączenie jest zepsute:" "nieoczekiwany stan 16777216". To tajemniczy komunikat o błędzie. – javajon