代码之家  ›  专栏  ›  技术社区  ›  James A. N. Stauffer

创建准备好的语句时,是什么导致Spring1.2NullPointerException?

  •  2
  • James A. N. Stauffer  · 技术社区  · 16 年前

    使用Spring1.2.1和oracle.jdbc.pool.OracleDataSource 10.2.0.3.0,我有时会得到如下堆栈跟踪。我认为这是因为连接池已满。有人确切知道原因吗?spring或oraclejdbc的新版本也能更好地处理这个问题吗?

    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)
    
    2 回复  |  直到 16 年前
        1
  •  3
  •   ChssPly76    16 年前

    这与春天无关。

    DataSource.getConnection() SQLException . 错误是由以下原因引起的: oracle.jdbc.pool.OracleDataSource 行为不端。

    更新 :

    根据 Oracke documentation 这种情况发生在:

    • 池中已分配最大连接数;
    • ConnectionWaitTimeout已设置为非零值
    • 您一直在等待getConnection(),但没有任何连接返回到池中。

    1. 使用另一个池:-)或在OracleDataSource周围编写一个简单的包装器,该包装器将检查返回的“null”并引发SqlException。

    不过,在最后一种情况下,您只能用一种例外情况换取另一种例外情况(NPE->SqlException)。当然,这会更合适,但它并不能真正解决问题。

        2
  •  0
  •   non sequitor    16 年前
    public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
    

    正如您所看到的,签名采用了像CHSSLY76所说的连接对象,但找不到它。