使用Spring 1.2.1和oracle.jdbc.pool.OracleDataSource 10.2.0.3.0我有时会得到如下所示的堆栈跟踪。我认为这是由连接池已满。有谁知道原因肯定吗?还有更新版本的spring或Oracle JDBC可以更好地处理这个吗?
java.lang.NullPointerException at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:213) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:444) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:491) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:522) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:543) at org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:114) at org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:124) at sps.wfds.biz.glacier.MemberDAO.create(MemberDAO.java:44) at sps.wfds.biz.glacier.MemberDAO.create(MemberDAO.java:23) at sps.wfds.biz.glacier.AbstractDAO.createAndValidate(AbstractDAO.java:22) at sps.wfds.web.interceptor.AbstractPrincipal.init(AbstractPrincipal.java:87) at sps.wfds.web.interceptor.AbstractPrincipal.getAttributes(AbstractPrincipal.java:66) at sps.wfds.web.interceptor.AbstractPrincipal.getAttribute(AbstractPrincipal.java:60) at sps.wfds.web.interceptor.AbstractPrincipal.setLocale(AbstractPrincipal.java:38) at sps.wfds.web.util.LocaleUtil.setLocale(LocaleUtil.java:24) at sps.wfds.web.interceptor.SSOPrincipal.(SSOPrincipal.java:22) at sps.wfds.web.interceptor.SSOAuthority.getPrincipal(SSOAuthority.java:18) at sps.wfds.web.interceptor.Authorization.preHandle(Authorization.java:44) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:674) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625) at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:386) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:346) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
答案 0 :(得分:3)
这与Spring无关。
DataSource.getConnection()
永远不应该返回null;它应返回有效连接或抛出SQLException
。该错误是由oracle.jdbc.pool.OracleDataSource
行为不端引起的。
<强>更新强>:
根据Oracke documentation,这发生在:
所以考虑到这一点,你可以:
在最后一个场景中,你只会为另一个例外交易一个例外(NPE - > SqlException)。当然,它会更合适,但它并不能解决问题。
答案 1 :(得分:0)
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
正如您所看到的,签名采用了像ChssPly76这样的Connection对象,并且无法找到它。