日期:2014-05-17  浏览次数:20624 次

后台删除某一帖子指定回复 的时候出了点问题,
servlet关键代码
 id 是回复的PK, content_id是帖子的PK
if(DBShowreview.deleteReview(Integer.parseInt(id),Integer.parseInt(content_id))){
resp.sendRedirect("reviewmanage.jsp?id="+content_id);
  }
else{
   resp.sendRedirect("review.jsp?id="+content_id);
    }


deleteReview的代码
public static boolean deleteReview(int review_id,int content_id){
     connect();
        // 删除指定回复。
     String sql = "delete from review where review_id=?";
     // 让 帖子的回复次数减1.
     String sql1 ="update content set count=count-1 where content_id=?";
     try {
psmt =conn.prepareStatement(sql);
psmt.setInt(1,review_id);
int i = psmt.executeUpdate();
psmt =conn.prepareStatement(sql1);
psmt.setInt(1,content_id);
int j = psmt.executeUpdate();
if(0!=i&&0!=j){
return true;
}
psmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    
     return false;
    }

按道理是 操作之后,回复的信息应该没了 然后帖子的回复数-1, 但是操作后 回复数倒是-1了, 但是 回复的信息没删掉 为什么呢。 
想要的结果是重定向到reviewmanage.jsp
但是结果是重定向到了review.jsp

------最佳解决方案--------------------
有可能你的帖子review_id没传递进来 、 方法才会return false的
仔细debug下
------其他解决方案--------------------
你这个应该整个事物才行啊,要么全部成功要么全部失败。
------其他解决方案--------------------
我初学 该怎么整

引用:
你这个应该整个事物才行啊,要么全部成功要么全部失败。

------其他解决方案--------------------
确实是review_id  没有传进来。前台js代码,
 function show_delete()
    {   
      var review_id;
       var checkboxs = document.getElementsByName("delete");
   for(var i = 0 ; i<checkboxs.length;i++)
   {
     if(checkboxs[i].checked)
 {
   review_id =checkboxs[i].value;
 }
   }
       var r = confirm("确定要删除此回复么 ?");
      
 if(r==true){ 
       window.location.href="deletereview?id="+review_id+"&content_id="+<%=id%>;
      
       }
    }
 这样拼接应该没错吧。  delete是个单选框的name,它的value值就是review_id
------其他解决方案--------------------
诶,粗心大意了~~ 数据库里面提取出来的review 忘记 加id  搞的id 全为0........