java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at com.common.html.dao.jdbc.JdbcUtil.getList(JdbcUtil.java:350)
at com.common.html.vo.IndexVo.initTOP_AD(IndexVo.java:147)
at com.common.html.vo.IndexVo.init(IndexVo.java:42)
at com.common.html.vo.IndexVo.<init>(IndexVo.java:18)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.common.html.vo.VoFactory.createVo(VoFactory.java:13)
at com.inte.web.action.CreateAction.execute(CreateAction.java:29)
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:84)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
at com.common.html.dao.jdbc.JdbcUtil.getList(JdbcUtil.java:377)
at com.common.html.vo.IndexVo.initTOP_AD(IndexVo.java:147)
at com.common.html.vo.IndexVo.init(IndexVo.java:42)
at com.common.html.vo.IndexVo.<init>(IndexVo.java:18)
(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.common.html.vo.VoFactory.createVo(VoFactory.java:13)
at com.inte.web.action.CreateAction.execute(CreateAction.java:29)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at com.common.html.dao.jdbc.JdbcUtil.getList(JdbcUtil.java:350)
at com.common.html.vo.IndexVo.parseLogo(IndexVo.java:407)
at com.common.html.vo.IndexVo.init(IndexVo.java:43)
at com.common.html.vo.IndexVo.<init>(IndexVo.java:18)
(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.common.html.vo.VoFactory.createVo(VoFactory.java:13)
at com.inte.web.action.CreateAction.execute(CreateAction.java:29)
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:84)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
at com.common.html.dao.jdbc.JdbcUtil.getList(JdbcUtil.java:377)
at com.common.html.vo.IndexVo.parseLogo(IndexVo.java:407)
at com.common.html.vo.IndexVo.init(IndexVo.java:43)
at com.common.html.vo.IndexVo.<init>(IndexVo.java:18)
(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.common.html.vo.VoFactory.createVo(VoFactory.java:13)
at com.inte.web.action.CreateAction.execute(CreateAction.java:29)
at java.lang.Thread.run(Thread.java:619)
java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:815) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at com.common.html.dao.jdbc.JdbcUtil.getList(JdbcUtil.java:350)
at com.common.html.vo.IndexVo.parserFlash(IndexVo.java:84)
at com.common.html.vo.IndexVo.init(IndexVo.java:44)
at com.common.html.vo.IndexVo.<init>(IndexVo.java:18)
(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.common.html.vo.VoFactory.createVo(VoFactory.java:13)
at com.inte.web.action.CreateAction.execute(CreateAction.java:29)
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:84)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
at com.common.html.dao.jdbc.JdbcUtil.getList(JdbcUtil.java:377)
at com.common.html.vo.IndexVo.parserFlash(IndexVo.java:84)
at com.common.html.vo.IndexVo.init(IndexVo.java:44)
at com.common.html.vo.IndexVo.<init>(IndexVo.java:18)
(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.common.html.vo.VoFactory.createVo(VoFactory.java:13)
at com.inte.web.action.CreateAction.execute(CreateAction.java:29)

解决方案 »

  1.   


    package com.common.html.dao.dbcp;import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.HashMap;
    import java.util.Map;
    import javax.sql.DataSource;
    import org.apache.commons.dbcp.BasicDataSource;public final class DbcpBean { /**
     * 配置信息
     */
    static private String url = "jdbc:oracle:thin*********************";
    static private String username = "*********************";";
    static private String password = "*********************";";
    static private String driver = "oracle.jdbc.driver.OracleDriver";
    /** 数据源,static */
    private static DataSource DS; static private DbcpBean bean = new DbcpBean(); public static synchronized DbcpBean getInstanse() {
    if (bean == null) {
    bean = new DbcpBean();
    return bean;
    }
    return bean;
    } /** 从数据源获得一个连接 */
    public synchronized Connection getConn() {
    try {
    return DS.getConnection();
    } catch (SQLException e) {
    System.out.println("获得连接出错!");
    e.printStackTrace();
    return null;
    }
    } /** 默认的构造函数 */
    private DbcpBean() {
    initDS();
    } /**
     * 创建数据源,除了数据库外,都使用硬编码默认参数;
     * 
     * @param connectURI
     *            数据库
     * @return
     */
    public static void initDS() {
    /**
     *  @param connectURI
     *            数据库
     * @param username
     *            用户名
     * @param pswd
     *            密码
     * @param driverClass
     *            数据库连接驱动名
     * @param initialSize
     *            初始连接池连接个数
     * @param maxActive
     *            最大激活连接数
     * @param maxIdle
     *            最大闲置连接数
     * @param minIdle
     *            最小闲置连接数
     * @param maxWait
     *            获得连接的最大等待毫秒数*/

    initDS(url, username, password, driver, 10, 50, 20,5, -1);
    } /**
     * 指定所有参数连接数据源
     * 
     * @param connectURI
     *            数据库
     * @param username
     *            用户名
     * @param pswd
     *            密码
     * @param driverClass
     *            数据库连接驱动名
     * @param initialSize
     *            初始连接池连接个数
     * @param maxActive
     *            最大激活连接数
     * @param maxIdle
     *            最大闲置连接数
     * @param minIdle
     *            最小闲置连接数
     * @param maxWait
     *            获得连接的最大等待毫秒数
     * @return
     */
    public static void initDS(String connectURI, String username, String pswd,
    String driverClass, int initialSize, int maxActive, int maxIdle,int minIdle,
    int maxWait) {
    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName(driverClass);
    ds.setUsername(username);
    ds.setPassword(pswd);
    ds.setUrl(connectURI);
    ds.setInitialSize(initialSize); // 初始的连接数;
    ds.setMaxActive(maxActive);
    ds.setMaxIdle(maxIdle);
    ds.setMinIdle(minIdle);
    ds.setMaxWait(maxWait); DS = ds;
    } /** 获得数据源连接状态 */
    public static Map<String, Integer> getDataSourceStats() throws SQLException {
    BasicDataSource bds = (BasicDataSource) DS;
    Map<String, Integer> map = new HashMap<String, Integer>(2);
    map.put("active_number", bds.getNumActive());
    map.put("idle_number", bds.getNumIdle());
    return map;
    } /** 关闭数据源 */
    protected static void shutdownDataSource() throws SQLException {
    BasicDataSource bds = (BasicDataSource) DS;
    bds.close();
    }}
    取链接就是使用 
    getConn() 方法不过如果有一段时间没有去使用的话,会报这个异常,但是反复请求后,链接又会被激活