哪为朋友知道SessionFactory.java中session = sessionFactory.openSession()是干什么用的?老是这句出错!在线候着

chinarenx 2005-12-06 09:52:16
public class SessionFactory {

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

private static final ThreadLocal threadLocal = new ThreadLocal();

private static final Configuration cfg = new Configuration();

private static net.sf.hibernate.SessionFactory sessionFactory;

public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();

if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession(); //就是这句!
threadLocal.set(session);
}

return session;
}

public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);

if (session != null) {
session.close();
}
}

private SessionFactory() {
}

}

2个例子都出现这个错,我用的MYECLIPSE 4.2,Hibernate 2。session = sessionFactory.openSession();这句有什么玄机吗?

java.lang.NullPointerException
com.nscorp.hibernate.SessionFactory.currentSession(SessionFactory.java:31)
com.nscorp.hibernate.VipService.getVipdataList(VipService.java:200)
org.apache.jsp.AddVipData_jsp._jspService(AddVipData_jsp.java:120)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

...全文
748 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2005-12-07
  • 打赏
  • 举报
回复
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}


程序应该是运行到这里的吧,应该有打印出错。
chinarenx 2005-12-06
  • 打赏
  • 举报
回复
好象没有

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NullPointerException
com.nscorp.hibernate.SessionFactory.currentSession(SessionFactory.java:31)
com.nscorp.hibernate.VipService.getVipdataList(VipService.java:200)
org.apache.jsp.AddVipData_jsp._jspService(AddVipData_jsp.java:120)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
ChDw 2005-12-06
  • 打赏
  • 举报
回复
SessionFactory 没有初始化好,应该是有打印 Error Creating SessionFactory的吧
chinarenx 2005-12-06
  • 打赏
  • 举报
回复
用户名,密码为空是可以连接数据库的,用户名可以为空,JSP连接数据库我会呀``````
rickhunterchen 2005-12-06
  • 打赏
  • 举报
回复
你可以参考一下这里:
http://www.blogjava.net/rickhunter/category/3664.html
rickhunterchen 2005-12-06
  • 打赏
  • 举报
回复
你没有用户名,密码怎么连数据库呢?
再怎么说,就算是空密码,用户名也要有一个。

另外,如果你是使用jsp连数据库,那么jdbc驱动需要倒入到lib包中,或者直接放在common/lib包中。
chinarenx 2005-12-06
  • 打赏
  • 举报
回复
这是我的hibernate.cfg.xml,在myeclipse中的DB Browser已经可以和数据库连接。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="myeclipse.connection.profile">vipinfo</property>
<property name="connection.url">jdbc:mysql://localhost/vipinfo</property>
<property name="connection.username"></property>
<property name="connection.password"></property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
net.sf.hibernate.dialect.MySQLDialect
</property>

<mapping resource="Add valid path" /><mapping resource="com/nscorp/hibernate/Vipdata.hbm.xml" />

</session-factory>

</hibernate-configuration>
rickhunterchen 2005-12-06
  • 打赏
  • 举报
回复
这是myeclipse可选的自动生成的session工厂。

这样你就省去了写建立session代码了。

java.lang.NullPointerException是空指针引用,多半是hibernate.cfg.xml的问题,或者没有jdbc驱动。
chinarenx 2005-12-06
  • 打赏
  • 举报
回复
请问怎么解决?
zeq258 2005-12-06
  • 打赏
  • 举报
回复
session = sessionFactory.openSession();

因为你的sessionFactory就没有初始化,
或者初始化的过程中有错误,所以不能用!
用户管理系统 public boolean isExists(User u) { boolean flag=false; Session session=sessionFactory.openSession(); String hql="from User as u where u.username=? and u.userpass=? and u.userright=?"; Query query=session.createQuery(hql) ; query.setString(0, u.getUsername()); query.setString(1, u.getUserpass()); query.setInteger(2, u.getUserright()); List list=query.list(); if(list.size()>0){ flag=true; } return flag; } public List selectAll() { System.out.println("dao查询所有"); Session session=sessionFactory.openSession(); Transaction tran=session.beginTransaction(); String hql="from User"; Query query=session.createQuery(hql); List list=query.list(); tran.commit(); session.close(); return list; } public boolean add(User u) { System.out.println("在执行UserDAO的add方法"); boolean flag=false; try { Session session=sessionFactory.openSession(); Transaction trans=session.beginTransaction(); session.save(u); trans.commit(); session.close(); flag=true; System.out.println("dao添加成功"+flag); } catch (HibernateException e) { System.out.println("dao添加失败"); e.printStackTrace(); } return flag; } public boolean delete(int uid) { System.out.println("dao执行delete方法"); boolean flag = false; Session session=sessionFactory.openSession(); session.clear(); Transaction trans = session.beginTransaction(); String hql = "delete User as u where u.uid=?"; Query query = session.createQuery(hql); query.setInteger(0, uid); int state = query.executeUpdate(); trans.commit(); session.close(); if (state != 0) { flag = true; System.out.println("dao删除成功"); } else { System.out.println("dao删除不成功"); } return flag; } public User selectByUid(int uid) { System.out.println("dao执行selectByUid方法"); Session session=sessionFactory.openSession(); session.clear(); Transaction trans = session.beginTransaction(); String hql = "from User as u where u.uid =?"; Query query = session.createQuery(hql); query.setInteger(0, uid); List list = query.list(); return (User) list.get(0); } public boolean update(User u) { System.out.println("dao执行update方法"); boolean flag = false; try { Session session=sessionFactory.openSession(); session.clear(); Transaction trans = session.beginTransaction(); session.update(u); trans.commit(); session.close(); flag = true; System.out.println("dao修改成成功"); } catch (HibernateException e) { System.out.println("dao修改成不成功"); e.printStackTrace(); } return flag; }

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧