mysql-connector-java-5.0.3-bin.jar中的Preparedstatement居然沒有isClosed()方法
阿新 • • 發佈:2019-02-02
白天為專案寫新增,本以為一個很簡單的操作,沒想到又遇到了麻煩,每次新增的時候,總是提示報錯:
<pre name="code" class="java">2016-2-20 0:43:25 org.apache.catalina.core.StandardWrapperValve invoke 嚴重: Servlet.service() for servlet UsersAction threw exception java.lang.AbstractMethodError: com.mysql.jdbc.ServerPreparedStatement.isClosed()Z at com.cc.dao.impl.BaseDao.closeAll(BaseDao.java:95) at com.cc.dao.impl.UserDaoImpl.addUsers(UserDaoImpl.java:46) at com.cc.service.impl.UsersServiceImpl.addUsers(UsersServiceImpl.java:83) at com.cc.action.UsersAction.addUsers(UsersAction.java:68) at com.cc.action.UsersAction.doPost(UsersAction.java:47) at javax.servlet.http.HttpServlet.service(HttpServlet.java:643) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619)
多次百度無果,經過多次測試,終於發現,在判斷ResultSet、PreparedStatement以及Connection的狀態的時候,是這樣寫的
解決辦法:註釋掉判斷三者.isClosed()的if語句即可。。。public void closeAll(){ if(this.rs!=null){ try { if(!this.rs.isClosed()){ this.rs.close(); } } catch (Exception e) { // TODO: handle exception } } if(this.ps!=null){ try { if(!this.ps.isClosed()){ this.ps.close(); } } catch (Exception e) { e.printStackTrace(); } } if(this.con!=null){ try { if(!this.con.isClosed()){ this.con.close(); } } catch (Exception e) { // TODO: handle exception } } } 問題原因:與Oracle不同,mysql的jar包裡面的ResultSet、PreparedStatement以及Connection是沒有.isClose()方法的。
為了找答案,又費了好大的勁。。。我就納悶了,你沒有這個方法你咋不在程式碼裡提示呢?一定要報個錯才可以。。。