В нашем приложении Struts2 Для выборки данных мы получили набор результатов закрыт . мы используем одну структуру для извлечения данных результатов. Мы используем BaseResultSetHandler для получения данных результатов в файле DAO. Я не могу найти причину, по которой набор результатов закрыт. В приведенном ниже коде, пожалуйста, помогите нам
у нас есть абстрактный класс BaseResultSetHandler
public abstract class BaseResultSetHandler {
protected ResultSet resultSet;
public abstract Object handleResult() throws SQLException;
public Object handleResultSet(ResultSet rs) throws SQLException{
setResultSet(rs);
Object obj = handleResult();
return obj;
}
public void setResultSet(ResultSet resultSet) {
this.resultSet = resultSet;
}
public ResultSet getResultSet() {
return resultSet;
}
public Integer getInteger(String columnName,ResultSet resultSet) throws SQLException{
return StringUtility.getInt(resultSet.getInt(columnName));
}
public String getString(String columnName,ResultSet resultSet) throws SQLException{
return StringUtility.getString(resultSet.getString(columnName));
}
public String getString(String columnName) throws SQLException{
return StringUtility.getString(resultSet.getString(columnName));
}
}
У нас есть один класс DatabaseManger для обработки операций с базой данных, у нас есть функция для извлечения данных из базы данных
protected Object executePreparedQuery(String query, List arguments, BaseResultSetHandler BaseResultSetHandler, Connection useThisConnection)
throws SQLException, InstantiationException, Exception, Throwable
{
ResultSet resultSet = null;
try {
if (ReferenceCheckUtlity.isNull(useThisConnection)) {
this.connection = getConnection();
}else{
this.connection = useThisConnection;
}
this.preparedStatement = this.connection.prepareStatement(query);
if (arguments != null) {
Iterator argumentsIterator = arguments.iterator();
int index = 1;
while (argumentsIterator.hasNext()) {
this.preparedStatement.setObject(index++, argumentsIterator.next());
}
}
resultSet = this.preparedStatement.executeQuery();
Object localObject2 = BaseResultSetHandler.handleResultSet(resultSet);
} finally {
if(resultSet!=null){
resultSet.close();
}
if(this.statement!=null){
this.statement.close();
}
if(this.preparedStatement!=null){
this.preparedStatement.close();
}
if(this.connection!=null){
this.connection.close();
}
}
return localObject2;
}
В файле DAO у меня есть метод с общим доступом только 2, здесь есть много методов в файле приблизительно 25+ классов, использующих BaseResultSetHandler
public String getCheckId(String Id) throws NumberFormatException, SQLException, InstantiationException, Exception, Throwable {
ArrayList<Object> argumentList=new ArrayList<Object>();
argumentList.add(Id);
int cnt=Integer.parseInt(""+executePreparedQuery(getCheckIdSql(), argumentList, new getCheckIdHandler(), null));
if(cnt==0){
return "N";
}else{
return "Y";
}
}
private String getCheckIdSql() {
StringBuffer query=new StringBuffer();
query.append("select count(1) as cnt from EMPLOYEES where ID=? for read only ");
return query.toString();
}
class getCheckIdHandler extends BaseResultSetHandler {
@Override
public Object handleResult() throws SQLException {
int cnt=0;
while(resultSet.next()){
cnt=getInteger("cnt");
}
return cnt;
}
}
public HashMap<String,String> getMajorData() throws InstantiationException, SQLException, Exception, Throwable{
LinkedHashMap<String,String> list = new LinkedHashMap<String,String>();
list=(LinkedHashMap<String, String>) executePreparedQuery(getMajorDataSql(), null, new getMajorDataHandler(), null);
return list;
}
private String getMajorDataSql() {
StringBuffer query=new StringBuffer();
query.append("select RMH_ode,MH_Name from RECMH order by MH_NM for read only");
return query.toString();
}
class getMajorDataHandler extends BaseResultSetHandler {
@Override
public Object handleResult() throws SQLException {
LinkedHashMap<String,String> list = new LinkedHashMap<String,String>();
while(resultSet.next()){
String RMH_CD=resultSet.getString("RMH_CD");
String MH_NM=resultSet.getString("MH_Name");
list.put(RMH_CD+"*"+MH_Name, RMH_CD+"-"+MH_Name);
}
return list;
}
}
И я также должен знать, что он разделяет BaseResultSetHandler resultSet Object