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: Заявление уже закрыта
java.sql.SQLException: Заявление уже закрыта] [[ACTIVE] ExecuteThread: '8' для очереди: 'weblogic.kernel.Default (self-tuning)'] [2014-10-28 05: 54: 17,918] [ERROR] [com.uprr.app.cpi.dao.CpiCustomerPipelinePreferencesDao: 104] [SQL Exception : java.sql.SQLException: executeQuery, Exception = null] [[ACTIVE] ExecuteThread: '5' для очереди: 'weblogic.kernel.Default (self-tuning)'] [2014-10-28 05:54: 17,918] [ERROR] [com.uprr.app.cpi.web.action. PatternSelectionAction: 112] [Got SQLException при обращении к таблице CPI_CUST_PILN_PREF: ExecuteQuery, Exception = NULL] [[ACTIVE] ExecuteThread: '5' для очереди: 'weblogic.kernel.Default (самонастройки)']
Мои сомнения прост, но я смущен:
Из приведенного выше кода я использую локальный объект подключения или глобальный? Пожалуйста, предложите.
Я согласен с вашим предложением. Однако, поскольку из примера кода OP неясно, является ли cpiDAOBase переменной, полем или классом, и это не то же самое, что и имя класса «CpiDaoBase», которое он объявил, я не был бы слишком уверен в том, что код * должен * be. – RealSkeptic
@RealSkeptic Возможно, это выглядит так, как надо, обратите внимание, что 'openDbConnection();' появляется, чтобы установить локальное поле 'Connection con'. –