Connecting to H2 server from DbVisualizer

隐身守侯 提交于 2019-12-06 23:09:56

问题


I have configured my H2 database as follows:

@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;
    }
}

I am now trying to access my database from DBVisualizer using the following jdbc URL: jdbc:h2:tcp://localhost/~/bignibou and I get the following error in dbvis logs:

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: Here is the log output I get after adding ;trace_level_system_out=3 to the connection url:

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: I also noticed this (in the application console logs):

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

回答1:


  • Latest H2 stable release: 1.3.176.
  • Latest dbVisualizer H2 driver: 1.3.176.

Probably you are using a the beta release of H2 (1.4.x) with some bug in the client/server communication (mismatching versions should not be a problem because the client and server negotiate which protocol version to use) try using the latest beta release from H2 or use the latest stable release of H2.




回答2:


Check the version of h2 JDBC driver you are using in DBVisualizer. Specifically, check if matches the version you are using with your server. While it normally shouldn't matter that the versions match, there were issues with H2 a while back that would cause these sorts of errors when using mismatched versions.

If that does not help, you might want to also report exactly which version of H2 you are using on both client and server.




回答3:


I had the same issue. I had H2 installed from http://h2database.com and grails app was throwing:

[localhost-startStop-1] ERROR StackTrace  - Full Stack Trace:
org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException: Connection refused: connect: localhost" [90067-176]

As it turned out my H2 server version was 1.4.196 and I had 1.3.176 loaded as grails dependency. I had update BuildConfig.groovy to make it work:

dependencies {
    ...
    test "org.grails:grails-datastore-test-support:1.0.2-grails-2.4"
    runtime "com.h2database:h2:1.4.196"
}


来源:https://stackoverflow.com/questions/30288260/connecting-to-h2-server-from-dbvisualizer

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!