删除问题哪里出错了

删除问题哪里出错了

//这是servlet的代码
public class CatalogServlet extends HttpServlet {

    private CatalogDAO catalogDAO = new CatalogDAO();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (req.getServletPath().indexOf("/catalog/add.do")!=-1){
            CatalogEntity catalog = CatalogDAOUtils.catalogEntity(req,resp);
            catalogDAO.addCatalog(catalog);
            resp.sendRedirect("/catalog/list.do");
        } else if (req.getServletPath().indexOf("/catalog/delete.do") != -1 ){
            String sid = req.getParameter("id");
            Integer id = Integer.valueOf(sid);
            catalogDAO.deletCatalog(id);
            resp.sendRedirect("/catalog/list.do");
        } else if (req.getServletPath().indexOf("/catalog/list.do") != -1){
            CatalogEntity catalog = new CatalogEntity();
            catalog.setId(10000);
            CatalogEntity catalogEntity = catalogDAO.getCatalogEntity(catalog);
            catalog = catalogDAO.getCatalogEntity(catalog);
            req.setAttribute("catalog",catalog);
            req.getRequestDispatcher("/WEB-INF/pages/catalog/catalog_list.jsp").forward(req,resp);
        }
    }
}
//DAO类的代码
public class CatalogDAO {
    private SqlSession sqlSession ;
    private CatalogEntity catalogEntity ;


    private SqlSession getSqlSession (){
        sqlSession = SqlSessionFactoryutils.getSqlSessionFactory().openSession();
        return sqlSession;
    }


    public CatalogEntity getCatalogEntity(CatalogEntity catalog ){
        try{
           catalogEntity = getSqlSession().selectOne("selectCatalog",catalog) ;
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return catalogEntity;
    }

    public void deletCatalog(Integer id){
        try{
            sqlSession = getSqlSession();
            sqlSession.delete("deleteCatalog",id);
        } catch (Exception e ){
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }

    public void addCatalog(CatalogEntity catalog){
       try{
           getSqlSession().insert("addCatalog",catalog);
       } catch (Exception e){
           e.printStackTrace();
       } finally {
           sqlSession.close();
       }
    }
}

//数据库mapper
<mapper namespace="com.imooc.entity.CatalogEntity">
    <delete id="deleteCatalog" >
        DELETE FROM catalog WHERE id = #{id}
    </delete>

    <insert id="addCatalog" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO catalog (title,pid,info)
        VALUES (#{title},#{pid},#{info})
    </insert>


    <select id="selectCatalog" resultMap="forCatalog">
        SELECT * FROM catalog WHERE id = #{id}
    </select>

    <select id="selectByPid" resultMap="forCatalog">
        SELECT * FROM catalog WHERE pid = #{id}
    </select>

    <resultMap id="forCatalog" type="com.imooc.entity.CatalogEntity">
        <result column="id" property="id" ></result>
        <result column="title" property="title"></result>
        <result column="pid" property="pid"></result>
        <result column="info" property="info"></result>
        <collection property="children" column="id" select="selectByPid"></collection>
    </resultMap>
</mapper>

点击删除链接的时候要删除的catalog的id能跟着request传递,但是就是不能在数据库中删除


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕柯南 2019-09-03 17:23:26

同学你好!

如果没有报错,老师猜测可能是由于锁被占用了,导致无法删除,来分析一下同学的代码:

http://img1.sycdn.imooc.com//climg/5d6e304500017dde06310449.jpg

可以看到同学的get和add都是直接使用了  getSqlSession().insert()这样的方式,并没有将 getSqlSession()赋值给sqlSession ,所以最后的关闭并没有实际的作用,建议同学都采用删除时先获取sqlSession ,然后在执行sql的方式测试一下

http://img1.sycdn.imooc.com//climg/5d6e30d100016ba803870108.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 慕设计3517557 #1
    老师但是我在getSqlSession方法中已经对sqlSession赋值了,然后我按照你说的还是不对 没报错 但是就是删除不了 点击jsp的删除链接id也传过来了,然后后面的请求转发也正常,但是就是删除不了
    2019-09-03 20:21:14
  • 好帮手慕柯南 回复 提问者 慕设计3517557 #2
    同学再贴一下最新的代码,老师帮同学看一下。祝学习愉快~
    2019-09-04 10:27:26
好帮手慕柯南 2019-09-03 16:08:05

同学这三个控制台下面都没有报错吗?

http://img1.sycdn.imooc.com//climg/5d6e1f560001ca9d05860133.jpg

祝学习愉快~

  • 提问者 慕设计3517557 #1
    03-Sep-2019 16:09:55.721 淇℃伅 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [D:\tomcat\tomcat8\webapps\manager] 03-Sep-2019 16:09:55.743 淇℃伅 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\tomcat\tomcat8\webapps\manager] has finished in [22] ms
    2019-09-03 16:11:01
  • 提问者 慕设计3517557 #2
    这是server下面的错误
    2019-09-03 16:12:20
好帮手慕柯南 2019-09-03 13:49:37

同学你好!

同学的代码看起来没有什么问题呢,控制台有报错吗?同学可以将报错的信息帖一下。

祝学习愉快~

  • 提问者 慕设计3517557 #1
    控制台也没有报错 就是catalogDAO.deletCatalog(id);这个语句不能正常执行,前面后面的语句都正常
    2019-09-03 15:21:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师