sqlSession.close()报错

sqlSession.close()报错

11分30秒, 这里的语句执行后会报错http://img1.sycdn.imooc.com//climg/5a3a937e0001356808550469.jpg数据可以正常取到

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

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

2回答
提问者 北极猫_ 2017-12-21 17:04:16
//UsersDAO
import com.mu.entity.Users;
import com.mu.utils.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

import static com.mu.utils.SqlSessionFactoryUtils.close;

public class UsersDAO {
    private SqlSession sqlSession= SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
    List<Users> list;
    
    public List<Users> findAll() {
        try {
            list = sqlSession.selectList("findAll");
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();   
            //close();
        }
        return list;
    }
}
//UsersFindServlet
import com.mu.dao.UsersDAO;
import com.mu.entity.Users;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/index")
public class UsersFindServlet extends javax.servlet.http.HttpServlet {
    private UsersDAO usersDAO = new UsersDAO();
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Users> list = usersDAO.findAll();
        
        req.setAttribute("usersList",list);
        
        req.getRequestDispatcher("index.jsp").forward(req, resp);
    }
}


  • 你好!看了你的UsersDAO,你的创建sqlSession的形式和老师是不一样的,老师的代码是通过一个方法去获取sqlSession,而你的代码是在全局变量中定义并创建了该对象,这样做在调用close()方法时会报错。在MyBatis中,解决这个问题的正确做法就是老师代码中演示的,这样每个方法都有一个sqlSession的对象,互相是不打扰的,关闭了也不影响其他的sqlSession。
    2017-12-21 17:26:30
  • 提问者 北极猫_ 回复 好帮手慕珊 #2
    我是对着老师的视频敲的哦:http://class.imooc.com/lesson/520#mid=12120,11分06秒. private SqlSession sqlSession= SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
    2017-12-21 17:50:55
  • 提问者 北极猫_ 回复 好帮手慕珊 #3
    老师在后面用你说的方法解决了. 用我的方法也可以解决问题
    2017-12-21 17:56:42
好帮手慕珊 2017-12-21 10:19:22

是你自己的代码报错了吗?你执行的时候UserDAO类中是只有一个方法,还是多个方法,有的时候多个方法共享一个全局变量sqlSession会产生这个问题。祝学习愉快!

  • 提问者 北极猫_ #1
    DAO只有一个方法. 我怀疑老师写错了:不应该执行sqlSession.close(); 应该调用 Utils包里的close方法关闭sqlSession.我这么做之后就不报错了
    2017-12-21 11:26:47
  • 好帮手慕珊 回复 提问者 北极猫_ #2
    你好!运行了一下老师的代码,没有发现你出现的这个异常,要不你把你的代码贴出来,我们试一下?
    2017-12-21 13:55:24
  • 提问者 北极猫_ 回复 好帮手慕珊 #3
    代码太多了. 怎么提交给你呢
    2017-12-21 15:48:01
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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