public void saveStudent(Student student){
try {
transaction = (org.hibernate.Transaction)session.beginTransaction();
session.save(student);
transaction.commit();
} catch (Exception e) {
transaction.rollback();
}finally{
session.close();
}
}保存方法如下,求指教,问题不知道出哪了。。
try {
transaction = (org.hibernate.Transaction)session.beginTransaction();
session.save(student);
transaction.commit();
} catch (Exception e) {
transaction.rollback();
}finally{
session.close();
}
}保存方法如下,求指教,问题不知道出哪了。。
是这里报的吗?确保session不为空。
突然发现数据库已经存进去了。。但是还是报指针。。我确信转发没错错误信息如下:java.lang.NullPointerException
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:431)
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:366)
org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
org.hibernate.loader.Loader.doQuery(Loader.java:661)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
org.hibernate.loader.Loader.doList(Loader.java:2147)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2026)
org.hibernate.loader.Loader.list(Loader.java:2021)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:369)
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:298)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1020)
org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
com.sinosoft.book.dao.StudentDaoImpl.getStudents(StudentDaoImpl.java:21)
com.sinosoft.book.service.StudentServiceIMPL.getStudents(StudentServiceIMPL.java:12)
com.sinosoft.book.web.studentAction.doPost(studentAction.java:56)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
这不是你上面保存的方法报的错啊。貌似是查询的时候报的。
com.sinosoft.book.service.StudentServiceIMPL.getStudents(StudentServiceIMPL.java:12)你再检查一下吧。
//登录
if("login".equals(method)){
List<Student> list = studentService.getStudents();
request.setAttribute("list", list);
request.getRequestDispatcher("/jsp/studentList.jsp").forward(request, response);
}
//添加学生
else if("add".equals(method)){
request.setCharacterEncoding("UTF-8");
String stuXh = Parameter.getStringParameter(request, "stuXh", "");
String stuXm = Parameter.getStringParameter(request, "stuXm", "");
String stuXb = Parameter.getStringParameter(request, "stuXb", "");
String stuNl = Parameter.getStringParameter(request, "stuNl", "");
String stuSch = Parameter.getStringParameter(request, "stuSch", "");
student.setStuXh(stuXh);
student.setStuXb(stuXb);
student.setStuXm(stuXm);
student.setStuNl(stuNl);
student.setStuSch(stuSch);
studentService.saveStudent(student);
List<Student> list = studentService.getStudents();
request.setAttribute("list", list);
request.getRequestDispatcher(request.getContextPath()+"/jsp/studentList.jsp").forward(request, response);
}直接登录调用第一个方法是有数据的,第二个方法在掉用getStudents就为空了。。不解
public List<Student> getStudents(){
String hql = " from Student";
List<Student> list=null;
try {
list = session.createQuery(hql).list();
session.flush();
} catch (Exception e) {
}finally{
session.close();
}
return list;
}去数据方法如下
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
org.hibernate.Transaction transaction = null;
@SuppressWarnings("unchecked")
public List<Student> getStudents(){
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
String hql = " from Student";
List<Student> list=null;
try {
list = session.createQuery(hql).list();
session.flush();
} catch (Exception e) {
}finally{
session.close();
}
return list;
}
问题解决。。我把方法外面定义的变量拿进来。就有用了
但是我不知道为什么
我想可能是你在finally将其关闭的缘故。在方法里边的session是每次调用都会重新创建一个,因此不会报错吧。