黑马程序员技术交流社区
标题:
一个有外键约束的数据表删除问题
[打印本页]
作者:
宋浩
时间:
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