黑马程序员技术交流社区

标题: 一个有外键约束的数据表删除问题 [打印本页]

作者: 宋浩    时间: 2012-6-7 16:33
标题: 一个有外键约束的数据表删除问题
本帖最后由 宋浩 于 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
   
请问大家有什么好的解决方法吗?不用我的代码也行,只要告诉我怎么解决这种要么全部删除,要么全部不删除的问题就行。。谢谢大家了!!

作者: 雷云红    时间: 2012-6-7 18:27
外键的删除要用到,级联删除




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2