Bean实体的不规范写法,所导致的奇葩SQLException

本文探讨了在使用DBCP数据源时遇到的异常问题,重点分析了实体Bean构造方法缺失导致的问题,并通过实现无参数构造方法解决了该问题。

我们在使用DBCP作为数据源(由Apache开发的),使用Apache下的开源数据源,利用DBCPUtil工具操作数据源,对数据进行增删改查。

我们会常常遇到这种问题:

二月 18, 2016 1:49:43 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [com.xbmu.android.ShowOrderExamServlet] in context with path [/DriverHelperServer] threw exception
java.lang.RuntimeException: java.sql.SQLException: Cannot create com.xbmu.bean.OrderExam: com.xbmu.bean.OrderExam Query: select * from t_orderexam where student_id=? Parameters: [p10001]
at com.xbmu.dao.impl.OrderExamDaoImpl.findOrderExamByStuId(OrderExamDaoImpl.java:50)
at com.xbmu.service.impl.OrderExamServiceImpl.findOrderExamByStuId(OrderExamServiceImpl.java:23)
at com.xbmu.android.ShowOrderExamServlet.showOrderExam(ShowOrderExamServlet.java:42)
at com.xbmu.android.ShowOrderExamServlet.doGet(ShowOrderExamServlet.java:33)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.xbmu.filter.SetAllCharacterEncodingFilter.doFilter(SetAllCharacterEncodingFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.sql.SQLException: Cannot create com.xbmu.bean.OrderExam: com.xbmu.bean.OrderExam Query: select * from t_orderexam where student_id=? Parameters: [p10001]
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:320)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:349)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:287)
at com.xbmu.dao.impl.OrderExamDaoImpl.findOrderExamByStuId(OrderExamDaoImpl.java:47)
... 29 more

我们观察所写的代码:


根据异常的提示,是47行报错,但是我们观察sql语句一点问题都没有,因此,我们推断到实体Bean,也就是OrderExam的问题。

最后仔细观察,原来没有重写OrderExam实体Bean的无参数构造方法。当我重写了无参数的构造方法后,这种异常被就解决了。


仔细想想,OrderExam orderExam = qr.query(sql, new BeanHandler<OrderExam>(OrderExam.class), sid);这条语句将从数据库查询的语句通过反射机制映射成实体Bean。

OrderExam.class创建对象时,应该是调用了无参数的构造方法。因此实体Bean中必须写这个无参数构造方法。















评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上善若水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值