WAS : DSRA9110E: Statement is closed

hewenzhi1983 2011-02-17 06:00:21
在重复提交或多客户操作时老出现DSRA9110E: Statement is closed这个错误,大大们帮忙看下行不。谢谢了!
下面是我调用的方法,入口为selRefForProNo,error是在执行select()方法是出现的:

public class ReservationExecController extends ReservationBaseController {

public ReservationExecController(ActionMapping mapping,
HttpServletRequest request, HttpServletResponse response,
ConnectionManager connMgr, ActionMessageManager messageMgr) {
super(mapping, request, response, connMgr, messageMgr);
// TODO 自动生成的构造函数存根
}

public List<ReservationNodepad> selReservationNodepad(ReservationNodepad reservationNodepad)throws Exception{
ReservationExecManager reservationExecManager = new ReservationExecManager(connMgr,messageMgr);
return reservationExecManager.select(reservationNodepad);
}

public List<GenericCode> selGenericCode(GenericCode genericCode)throws Exception{
ReservationExecManager reservationExecManager = new ReservationExecManager(connMgr,messageMgr);
return reservationExecManager.select(genericCode);
}

public List<ReservationSchedule> selReservationSchedule(ReservationSchedule reservationSchedule) throws Exception{
ReservationExecManager reservationExecManager = new ReservationExecManager(connMgr,messageMgr);
reservationSchedule.setActiveIdx(ReservationParameter.ACTIVEIDX_Y);
return reservationExecManager.select(reservationSchedule);
}

public List<Proposal> selProposal(Proposal proposal) throws Exception{
ReservationExecManager reservationExecManager = new ReservationExecManager(connMgr,messageMgr);
return reservationExecManager.select(proposal);
}

public List<ReservationTransaction> selReservationTransaction(ReservationTransaction reservationTransaction) throws Exception{
ReservationExecManager reservationExecManager = new ReservationExecManager(connMgr,messageMgr);
return reservationExecManager.select(reservationTransaction);
}

public List<ReservationStatus> selReservationStatus(ReservationStatus reservationStatus) throws Exception{
ReservationExecManager reservationExecManager = new ReservationExecManager(connMgr,messageMgr);
return reservationExecManager.select(reservationStatus);
}

public boolean selRefForProNo(ReservationExecForm reservationExecForm) throws Exception{
boolean bool = true;
List<Proposal> proList = selProposal(reservationExecForm.getProposal());
bool = isValiProNo(proList);
bool = bool && ReservationParameter.LOAN_STATUS_SIGN.equals(proList.get(0).getStatus());
if(bool){
reservationExecForm.setProposal(proList.get(0));
selReservationExecForm(reservationExecForm);
ReservationLocking reservationLocking = new ReservationLocking();
reservationLocking.setProposalNo(reservationExecForm.getProposal().getProposalNo());
List<ReservationLocking> rlList = selReservationLock(reservationLocking);
if(rlList.size() > 0 && !request.getSession().getAttribute("username").toString().equals(rlList.get(0).getCreateBy())){
reservationExecForm.setIsLock(true);
reservationExecForm.setReservationLocking(rlList.get(0));
} else{
bool = bool && addReservationLocking(reservationLocking) == 1 ? true : false;
reservationExecForm.setIsLock(false);
reservationExecForm.setReservationLocking(reservationLocking);
}
getReservationExecList(reservationExecForm);
}
return bool;
}

public boolean selReservationExecForm(ReservationExecForm reservationExecForm) throws Exception{
boolean bool = true;
ReservationNodepad reservationNodepad = new ReservationNodepad();
reservationNodepad.setProposalNo(reservationExecForm.getProposal().getProposalNo());
Util.clearList(reservationExecForm.getRnList()).addAll(selReservationNodepad(reservationNodepad));
for (ReservationNodepad rn : reservationExecForm.getRnList()) {
if(rn.getCreatedDate() != null){
rn.getRnd().setCreatedDate(Util.DateStringConverter(rn.getCreatedDate(), ReservationParameter.DATE_FORMAT_ITEM));
}
if(rn.getLastUpdatedDate() != null){
rn.getRnd().setLastUpdatedDate(Util.DateStringConverter(rn.getLastUpdatedDate(), ReservationParameter.DATE_FORMAT_ITEM));
}
}
ReservationSchedule reservationSchedule = new ReservationSchedule();
reservationSchedule.setBranchCode(reservationExecForm.getProposal().getBranchCode());
Util.clearList(reservationExecForm.getRsList()).addAll(selReservationSchedule(reservationSchedule));
GenericCode genericCode = new GenericCode();
genericCode.setCategory(ReservationParameter.CATEGORY);
List<GenericCode> gcList = selGenericCode(genericCode);
for (GenericCode gc : gcList) {
if(gc.getGroupCode() == null || "".equals(gc.getGroupCode())){
reservationExecForm.getGcParentList().add(gc);
} else{
reservationExecForm.getGcChildList().add(gc);
}
}
reservationExecForm.getReservationStatus().setActiveIdx(ReservationParameter.ACTIVEIDX_Y);
reservationExecForm.getReservationStatus().setProposalNo(reservationExecForm.getProposal().getProposalNo());
List<ReservationStatus> rsList = selReservationStatus(reservationExecForm.getReservationStatus());
reservationExecForm.setReservationStatus(rsList.size() == 1 ? rsList.get(0) : null);
reservationExecForm.getReservationTransaction().setActiveIdx(ReservationParameter.ACTIVEIDX_Y);
reservationExecForm.getReservationTransaction().setProposalNo(reservationExecForm.getProposal().getProposalNo());
List<ReservationTransaction> rtList = selReservationTransaction(reservationExecForm.getReservationTransaction());
reservationExecForm.setReservationTransaction(rtList.size() == 1 ? rtList.get(0) : null);
if(rtList.size() > 0){
Date reserveDate = reservationExecForm.getReservationTransaction().getReserveDate();
reservationExecForm.setReserveDate(reserveDate == null ? null : Util.DateStringConverter(reserveDate, ReservationParameter.DATE_FORMAT_NOITEM));
} else{
reservationExecForm.setReserveDate(null);
}
Collections.sort(reservationExecForm.getRsList());
return bool;
}
...全文
751 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hewenzhi1983 2011-02-18
  • 打赏
  • 举报
回复
ResultSet和PreparedStatement会自动失效吗?
hewenzhi1983 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 woshigaoshou980 的回复:]
Java code

try{
if( rs != null || !rs.isClosed()){ rs.close(); rs = null;}
if( ps != null || !ps.isClosed()){ ps.close(); ps = null;}
} catch(SQLException e){
e.printStackTrace();
}




楼主……
[/Quote]

我是把结果集写入list后,在finally块中关闭的rs和ps,不是很明白你所说的还有用没的意思
  • 打赏
  • 举报
回复

try{
if( rs != null || !rs.isClosed()){ rs.close(); rs = null;}
if( ps != null || !ps.isClosed()){ ps.close(); ps = null;}
} catch(SQLException e){
e.printStackTrace();
}



楼主,不要一遇到try 就close,先要看还有用没。




希望对你有帮助
magong 2011-02-18
  • 打赏
  • 举报
回复
搜了一下,网上说是连接池问题。
你试过直连数据库没有?
hewenzhi1983 2011-02-18
  • 打赏
  • 举报
回复
大大们帮忙看看啊,谢谢!
hewenzhi1983 2011-02-18
  • 打赏
  • 举报
回复
怎么没人回呢?自己顶下!
hewenzhi1983 2011-02-17
  • 打赏
  • 举报
回复
BaseManager类是ReservationExecManager类的父类,在调试时发现某些时候执行BaseManager类中select()的rs = ps.executeQuery()时就会出现DSRA9110E: Statement is closed,我一开始以为是多线程的问题,在select(),selRefForProNo()方法前加了synchronized,但是没有效果。

大大们帮忙看看咯,我研究一天了都。谢谢!!!
hewenzhi1983 2011-02-17
  • 打赏
  • 举报
回复
public class BaseManager {
public ConnectionManager connMgr = null;
public static Logger logger = Parameter.logger;
protected ActionMessageManager messageMgr =null;

public <T extends Object> List<T> select(T entity)throws Exception{
List<T> list = new ArrayList<T>();
Class cls = entity.getClass();
String tblName = Util.getOracleName(cls.getSimpleName());
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
StringBuffer sql = new StringBuffer("Select ");
StringBuffer sql1 = new StringBuffer();
List<Object> valueList = new ArrayList<Object>();
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
String proName = field.getName();
if(Util.DATA_TYPE_MAP.containsKey(field.getType().getName())){
if(Parameter.DATA_STATUS.equals(field.getType().getName())){
sql.append("to_char(").append(Util.getOracleName(proName));
sql.append(",'yyyy-mm-dd hh24:mi:ss') ").append(Util.getOracleName(proName));
sql.append(",");
}else{
sql.append(Util.getOracleName(proName)).append(",");
}
}
Object value = Util.getProValue(entity, field);
if(Util.DATA_TYPE_MAP.containsKey(field.getType().getName()) && value!=null && !"".equals(value)){
if(!field.getType().getName().equals(field.getType().getSimpleName())){
if(Parameter.DATA_STATUS.equals(field.getType().getName())){
sql1.append(" and ").append("to_char(").append(Util.getOracleName(proName));
sql1.append(",'yyyy-mm-dd')").append(" = ? ");
value = Util.DateStringConverter((Date)value, "yyyy-MM-dd");
}else{
sql1.append(" and ").append(Util.getOracleName(proName)).append(" = ? ");
}
valueList.add(value);
}
}
}
sql = sql.delete(sql.length()-1, sql.length());
sql.append(" from ").append(tblName)
.append(" where 1 = 1 ");
sql.append(sql1);
try {
conn = connMgr.getConnection();
ps = conn.prepareStatement(sql.toString());
for(int i = 0 ; i < valueList.size() ; i++){
ps.setObject(i + 1, valueList.get(i));
}
rs = ps.executeQuery();
while(rs.next()){
Object entityObj = Class.forName(cls.getName()).newInstance();
for (Field field : fields) {
if(Util.DATA_TYPE_MAP.containsKey(field.getType().getName())){
Object value = rs.getObject(Util.getOracleName(field.getName()));
if(Parameter.DATA_STATUS.equals(field.getType().getName()) && value != null){
value = Util.DateStringConverter(value.toString(), "yyyy-MM-dd HH:mm:ss");
}
Util.setProValue(entityObj, field, value);
}
}
list.add((T)entityObj);
}
} catch (Exception e) {
e.printStackTrace();
logger.error("select Sql exception (table " + tblName + "): " + e);
throw e;
} finally{
try{
if( rs != null || !rs.isClosed()){ rs.close(); rs = null;}
if( ps != null || !ps.isClosed()){ ps.close(); ps = null;}
} catch(SQLException e){
e.printStackTrace();
}
}
return list;
}
}

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧