概述
这个是初学jsp和MVC时做一个留言板过程中遇到的问题,当时花了很长时间也没有搞明白原因,最后只好先放弃搞别的了。
等学了大半年了再回过头来看这个问题,似乎有点眉目了,记得当时写数据库连接类的时候,不明白其中的设计原理,说白了就是不懂得系统的设计,结果这么简单一个类搞得我很郁闷,原本想找个经典的版本模仿下,后来却发现原来每个人写的都不一样,然后我就迷失在这众多的版本中了,最后在自己的系统中模仿了一个我自己都不太理解的写法,好像代码中还采用了单件模式和工厂模式。
就是这么个工具类导致我这个系统的数据库连接方面不断的出问题,我知道这肯定怨不得原作者,他这个类其实设计的是很牛B的,现在看来也的确是那么回事,可我那时侯没经验理解不到位,愣是不知道怎么去用这个类,开始的问题是我像每本书里讲的那样,遵守开闭原则,把宝贵的数据库连接用过之后马上就释放了,但事实却是往往当我还没用完的时候,不知道就在哪段代码中给关闭了,结果就出现了下面的问题。
后来我干脆把所有关闭数据库连接的代码都删除了,这倒是世界清静了,不再报错了,但是我心里清楚这代码写的分明有问题啊,数据库连接怎么能不关闭那?时间长了肯定要耗尽系统资源的啊,还有这要是一直不关闭,数据库连接池也起不到回收资源的作用啊。当时就是被这些问题困扰着,一直都没想明白。
回头得再把这个类研究研究,写个详细的说明。
java.sql.SQLException: org.apache.tomcat.dbcp.dbcp.DelegatingStatement with address: "com.mysql.jdbc.Statement@18bf072" is closed.
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.checkOpen(DelegatingStatement.java:137)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:206)
at org.database.DataStore.read(DataStore.java:151)
at org.module.MInbox.getNewestMail(MInbox.java:50)
at org.controller.Inbox.doGet(Inbox.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Unknown Source)
最后
以上就是无私面包为你收集整理的始终搞不懂的问题!!!的全部内容,希望文章能够帮你解决始终搞不懂的问题!!!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复