我按如下方式配置了我的H2数据库:
sudo
我现在尝试使用以下jdbc URL从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;
}
}
我在dbvis日志中收到以下错误:
jdbc:h2:tcp://localhost/~/bignibou
编辑:以下是将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)
添加到连接网址后得到的日志输出:
;trace_level_system_out=3
编辑2 :我也注意到了这一点(在应用程序控制台日志中):
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
答案 0 :(得分:12)
可能你正在使用H2(1.4.x)的beta版本与客户端/服务器通信中的一些错误(不匹配的版本不应该是一个问题,因为客户端和服务器协商使用哪个协议版本)尝试使用H2的最新测试版或使用H2的最新稳定版本。
答案 1 :(得分:3)
检查您在DBVisualizer中使用的h2 JDBC驱动程序的版本。具体来说,检查是否与您在服务器上使用的版本相匹配。虽然版本匹配通常并不重要,但是在使用不匹配的版本时,H2会出现问题,这会导致这些类型的错误。
如果这没有帮助,您可能还想要准确报告您在客户端和服务器上使用的H2版本。
答案 2 :(得分:0)
我有同样的问题。我从http://h2database.com安装了H2,并且grails应用抛出了问题:
SET COLSEP ,
SET HEADSEP OFF -- character used when defining a two-line column heading
SET TRIMSPOOL ON -- trim trailing spaces from each line
SET LINESIZE 32000 -- number of characters to be printed on one line
SET WRAP OFF -- truncates lines longer than LINESIZE
SET NUMWIDTH 5 -- default width while displaying numbers
COLUMN tm new_value iso8601 noprint
SELECT to_char(sysdate, 'YYYY-MM-DD') tm FROM dual;
spool output_file_&iso8601..csv
-- Append new data to spool file: "spool output_file_&iso8601..csv append"
SELECT
*
FROM
table_name
spool OFF
事实证明,我的H2服务器版本为1.4.196,并且作为grails依赖项加载了1.3.176。我更新了BuildConfig.groovy以使其正常工作:
[localhost-startStop-1] ERROR StackTrace - Full Stack Trace:
org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException: Connection refused: connect: localhost" [90067-176]