c 3 p 0データベース接続プール使用エラー【You can't operate on a closed Connection!!】ソリューション
一般的に、私たちのプロジェクトにはデータベース接続を取得する方法があります.
データベース接続を取得する方法は、次のとおりです.
1. CommoPooledDataSourceオブジェクトを作成し、getConnection()メソッドを使用して接続を取得します.
2. Connectionとして汎用的なThreadLocalオブジェクトを作成し、現在のメソッドで保存されているデータベース接続をget()メソッドで取り出し、setメソッドで接続を追加して返します.
具体的なコード:
問題は、接続が閉じた後も再取得されずに使用されていることです.エラーメッセージは、閉じた接続で操作できないことを示します.
データベース接続を取得する方法は、次のとおりです.
1. CommoPooledDataSourceオブジェクトを作成し、getConnection()メソッドを使用して接続を取得します.
2. Connectionとして汎用的なThreadLocal
具体的なコード:
private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); // ThreadLocal
private static ComboPooledDataSource dataSourcedataSource = new ComboPooledDataSource(); //
/**
*
* @Title:
getConnection
* @author GNODIAD
* @date 2014-11-6
10:54:33
* @Description: |--
* @return
* @throws
SQLException
*
*/
public static Connection getConnection() throws SQLException {
/*
* 1).
ThreadLocal
* 2).
, ,
*
ThreadLocal
* 3).
,
*/
Connection conn =
threadLocal.get();
if (conn == null || conn.isClosed())
{// 【 】
conn =
dataSource.getConnection(); //
threadLocal.set(conn);
// ThreadLocal
}
return conn; //
}
問題は、接続が閉じた後も再取得されずに使用されていることです.エラーメッセージは、閉じた接続で操作できないことを示します.