java.sql.SQLException:Statement已经关闭

时间:2014-10-28 14:01:52

标签: java weblogic-10.x

public class CpiDaoBase {

protected Connection con = null;

public void test(){
cpiDAOBase.openDbConnection();
ps = new cpiDAOBase().con.prepareStatement(INSERT_CARRIER);
ps.executeQuery();
... blah blah blah
 }

 public void openDbConnection() throws CpiSystemException
    {
        try {
            if (con == null || con.isClosed()) {
                con = CpiDataSource.getNonTxConnection();
            }
        } catch (SQLException e) {
            log.error(e.getMessage(), e);
            new CpiSystemException("SQLException caused by con.isClosed(): " + e.getMessage());
        }
    }   
}

public class CpiDataSource {
    public static Connection getNonTxConnection() throws CpiSystemException {
    try {
        if (nonTxDs == null) 
        {
            if(log.isDebugEnabled()){
                log.debug("nonTxDs is null");
            }
            init();
        }
        return nonTxDs.getConnection();
    } catch (NamingException e) 
    {
        log.error("cpiPoolDataSource is not available !" + e);
        throw new CpiSystemException("cpiPoolDataSource is not available !");
    } catch (SQLException e) 
    {
        log.error("Failed to get connection from datasource !" + e);
        throw new CpiSystemException("Failed to get connection from datasource !");
    } catch (Exception e) 
    {
        log.error("Exception \n" + e);
        throw new CpiSystemException(e.getMessage());
    }
}
}

我遇到异常:

java.sql.SQLException:语句已经关闭] ​​[[ACTIVE] ExecuteThread:' 8'对于队列:' weblogic.kernel.Default(自我调整)'] [2014-10-28 05:54:17,918] [错误] [com.uprr.app.cpi.dao.CpiCustomerPipelinePreferencesDao:104] [SQL异常: java.sql.SQLException:executeQuery,Exception = null] [[ACTIVE] ExecuteThread:' 5'对于队列:' weblogic.kernel.Default(自我调整)'] [2014-10-28 05:54:17,918] [ERROR] [com.uprr.app.cpi.web.action.PatternSelectionAction:112] [访问CPI_CUST_PILN_PREF表时得到SQLException:executeQuery,Exception = null] [[ACTIVE ] ExecuteThread:' 5' for queue:' weblogic.kernel.Default(自我调整)']

我的疑问很简单,但我很困惑:

从上面的代码我使用的是本地连接对象还是全局?请建议。

1 个答案:

答案 0 :(得分:0)

您没有使用Connectionopen。此,

cpiDAOBase.openDbConnection();
ps = new cpiDAOBase().con.prepareStatement(INSERT_CARRIER);

应该是

cpiDAOBase.openDbConnection();
ps = cpiDAOBase.con.prepareStatement(INSERT_CARRIER);

因为您使用new cpiDAOBase()创建的实例没有openDbConnection