A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋浩 中级黑马   /  2012-6-7 16:33  /  1848 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋浩 于 2012-6-7 16:38 编辑

首先,有两个表,一个是频道表:channel
create table channel(
  cid varchar(20) not null primary key,
  name varchar(20)
);
另一个栏目表:program
create table program(
  pid varchar(20) not null primary key,
  name varchar(20),
  cid varchar(20),
  foreign key (cid) references channel(cid)
);
删除的时候,如果要删除频道表的一条数据,那么需要将对应的栏目表下面的数据也要全部删除,否则就要全部不删除。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  
  //首先获取从客户端返回来的频道ID
  String cid=request.getParameter("cid");
   
  //连接数据库,并删除相应的数据
  ChannelDao cd=new ChannelDao();//这是处理频道表的dao
  ProgramDao pd=new ProgramDao();//这是处理栏目表的dao
  
  Connection cc=null;//频道表的连接
  Connection pc=null;//栏目表的连接
   
  try{
   
      cc=cd.getConn();//拿到频道表的连接
      pc=pd.getConn();//拿到栏目表的连接
      
      cc.setAutoCommit(false);//首先设置为false
      pc.setAutoCommit(false);
   
   boolean pflage=pd.delProgram(cid);//首先,进行栏目表的删除
   boolean cflage=cd.delChannel(cid);//其次,进行频道表的删除
   
   //当两条数据都成功才可以提交
   if(cflage==true&&pflage==true){
    pc.commit();
    cc.commit();//两条都成功了
   
    response.sendRedirect("channelManager.jsp");
   }else{
    pc.rollback();
    cc.rollback();//只要有一条数据不成功,两条都回滚
    request.setAttribute("information", "频道删除失败");
    request.getRequestDispatcher("fail.jsp").forward(request, response);
   }
  }catch(Exception e){
   e.printStackTrace();
  }
}
运行发生了异常:java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
   
请问大家有什么好的解决方法吗?不用我的代码也行,只要告诉我怎么解决这种要么全部删除,要么全部不删除的问题就行。。谢谢大家了!!

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
外键的删除要用到,级联删除
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马