请教:
    使用DBCP数据库连接池,假如设定最多有100个连接。    1、如果由于程序异常,导致一个连接出错,这个连接会不会自动关闭或者销毁?它会变成什么状态?    2、如果出现100次异常,是不是这个连接池就无法再提供连接了?也就无法再被使用了?

解决方案 »

  1.   


    谢谢。还有一个问题:
        如果把dbcp连接池的DataSource注册到spring的JdbcTemplate中。使用过程出现异常的话改如何处理?应该在哪里手动关闭连接,spring是不是已经做好异常关闭处理了。就不用我再手动关闭了?谢谢。
      

  2.   


    调用时加上try{}catch(){}finally{}
    在finally里把连接关闭,无论是否异常,连接都应该正常关闭
      

  3.   

    这个确实在finally里把连接关闭,无论是否异常,连接都应该正常关闭 楼主问的不太清楚 
      

  4.   


    spring的jdbc模板已经把connection封装起来了。xml(把dbcp数据源注册到spring的jdbc模版中):<!-- peaas 数据源 -->
    <bean id="peaasDataSource"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName"
            value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@192.168.1.200:1521:orcl" />
        <property name="username" value="peaas" />
        <property name="password" value="peaas_dxdgW" />
        <property name="defaultReadOnly" value="true" />
    </bean>
    <!-- 权限 DAO -->
    <bean id="powerDAO" class="tyt.peaas.sf.power.dao.PowerDAO">
        <property name="casJDBCTemplate">
            <ref bean="casJDBCTemplate" />
        </property>
    </bean>
    代码中使用的时候:/**
     * 用户登陆
     * 
     * @param userCode
     *            用户登录名
     * @param userPassword
     *            用户登录密码
     * 
     * @return 登陆成功返回登陆的 UserBean;失败返回 null
     */
    @SuppressWarnings("unchecked")
    public User login(String userCode, String userPassword) {
        String sql = "select * from OPERUSER where USER_CODE=? and USER_PWD=?";    final User user = new User();    casJDBCTemplate.query(sql, new Object[] { userCode, userPassword },
                new RowCallbackHandler() {
                    public void processRow(ResultSet rs) throws SQLException {
                        user.setUserCode(rs.getString("USER_CODE"));
                        user.setUserName(rs.getString("USER_NAME"));
                        user.setSysPower(rs.getString("SYS_POWER"));
                        user.setUserPwd(rs.getString("USER_PWD"));
                    }
                });    return user;
    }
    不需要处理程序员使用try catch finally来控制。我自己去看spring源码吧……
      

  5.   

    finally {
    if (stmt != null) stmt.close();
    if (conn != null)conn.close();
    }