ResultSet处理Operation not allowed after ResultSet closed案例

发布时间 2023-06-15 09:44:56作者: 爱豆技术部

ResultSet处理Operation not allowed after ResultSet closed案例

package nc.plugin.uap.maindata;

import java.math.BigInteger;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import nc.bs.pub.pa.PreAlertObject;
import nc.bs.pub.taskcenter.BgWorkingContext;
import nc.bs.pub.taskcenter.IBackgroundWorkPlugin;
import nc.tool.uap.JDBCUtil;
import nc.vo.pub.BusinessException;

public class testDemo implements IBackgroundWorkPlugin{

@SuppressWarnings({ "unused", "unchecked", "resource" })
@Override
public PreAlertObject executeTask(BgWorkingContext arg0)
throws BusinessException {

String account =null;
String id=null;
String sql=null;
Connection con = null;
Statement sQuery = null;
ResultSet resultSet = null;
String process_status=null;
long retry_count=0L;
int resl = 0;
con=JDBCUtil.getconn();

//Statement update =null;
try {
sQuery  =con.createStatement();
//update = con.createStatement();
//关闭事物的自动提交
con.setAutoCommit(false);

String updatesql="select id,process_status,retry_count from cux_nc_to_wms_front_log";//构建sql语句
resultSet = sQuery .executeQuery(updatesql);

while(resultSet.next()){

process_status = resultSet.getString("process_status");
retry_count = resultSet.getLong("retry_count");
id = resultSet.getString("id");
// 只能进行单次数据库的操作,每对数据库执行一次操做就会释放 resultSet
if(retry_count==3&"NC_SUCCESS".equals(process_status)){
                   //通过多次连接 createStatement处理 Operation not allowed after ResultSet closed
sQuery  =con.createStatement();
process_status="END";
sql="UPDATE `cux_nc_to_wms_front_log` SET `process_status` = '"+process_status+"', `retry_count` = "+retry_count+" WHERE `id` = "+id+"";//构建sql语句
resl = sQuery .executeUpdate(sql);
}
if(retry_count<=3&"WMS_FAIL".equals(process_status)){
sQuery  =con.createStatement();
process_status="PENDING";
retry_count+=1;
sql="UPDATE `cux_nc_to_wms_front_log` SET `process_status` = '"+process_status+"', `retry_count` = "+retry_count+" WHERE `id` = "+id+"";//构建sql语句
//每对数据库执行一次操做就会释放 resultSet
resl = sQuery .executeUpdate(sql);
}
}
//提交事物
con.commit();

} catch (SQLException e) {
   if (con != null) {
       try {
      con.rollback();
      } catch (SQLException ex) {
           // 回滚异常
      }
  }
   // 数据库异常
} finally {
   // 5.关闭连接
   if (sQuery  != null) {
       try {
      sQuery .close();
      } catch (SQLException e) {
           // 关闭Statement异常
      }
  }
   if (con != null) {
       try {
      con.close();
      } catch (SQLException e) {
           // 关闭连接异常
      }
  }
}
return null;
}
}