程序运行起来,执行一个页面后返回一个新页面的数据是上一个页面的。这就痛苦了。控制台提示以下java
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.executor.ExecutorException: Executor was closed.
### Cause: org.apache.ibatis.executor.ExecutorException: Executor was closed.
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
at com.damu.dao.UsersDAO.findById(UsersDAO.java:37)
at com.damu.servlet.UserFindByIdServlet.doPost(UserFindByIdServlet.java:19)
at com.damu.servlet.UserFindByIdServlet.doGet(UserFindByIdServlet.java:28)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
复制代码
在查找众多资料中,发现sessio在查询数据所有的时候,已经关闭了,代码以下:sql
public List<Users> findAll() {
try {
list = sqlSession .selectList("findAll");
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return list;
}
/*
* 查询单个用户*/
public Users findById(Integer id) {
try {
users = sqlSession.selectOne("findById", id);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return users;
}
复制代码
在执行第一session的时候已经关闭了,修代码以下apache
sqlSession = SqlSessionFactoryUtils.getsqlSessionFactory().openSession();
return sqlSession;
}
复制代码
把要用的session抽象到一方法里面,一个方法只是关闭一次。 总结:bash