天天看點

H2資料庫操作

運作對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