运行对H2进行增删改查程序,出现如下错误信息:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [drop table if exists TEST]; SQL state [90067]; error code [90067]; Connection is broken: "unexpected status 16777216" [90067-190]; nested exception is org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-190] org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) javax.servlet.http.HttpServlet.service(HttpServlet.java:635) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [drop table if exists TEST]; SQL state [90067]; error code [90067]; Connection is broken: "unexpected status 16777216" [90067-190]; nested exception is org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-190] org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:419) org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:443) spittr.db.jdbc.JdbcSpitterRepository.establishTable(JdbcSpitterRepository.java:111) spittr.controller.jdbcController.establishTable(jdbcController.java:35) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) javax.servlet.http.HttpServlet.service(HttpServlet.java:635) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
org.h2.jdbc.JdbcSQLException: Connection is broken: "unexpected status 16777216" [90067-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.engine.SessionRemote.done(SessionRemote.java:639) org.h2.command.CommandRemote.prepare(CommandRemote.java:68)
经过Google,发现出现该错误的主要原因是H2的版本不一致造成的。而查看我整个环境发现,H2服务器运行的是1.4.196,而intellij下的插件是1.4.192。于是想着更改inteliij下的插件,但是发现不好更改。通过阅读H2官方文档(涉及到安装与启动等),发现H2的启动即是通过运行jar文件,于是我关闭196的H2,运行intellij下的jar,命令如下:java -jar h2-1.4.192.jar。然后再次运行程序,数据库的增删改查操作均正常。
参考网址:https://groups.google.com/forum/#!topic/h2-database/qZ5bpboIC6U