数据库是MySQl的
mysql> use hibernatetest
Database changed
mysql> select * from student
-> ;
+-----------+------+----------+
| idStudent | name | number |
+-----------+------+----------+
| 1 | zjj | 20000101 |
| 2 | zhou | 20000102 |
+-----------+------+----------+
2 rows in set (0.03 sec)
Hibernate运行查询的时候有空指针异常,不知道是哪里的错误导致查询失败,错误贴上
log4j:WARN No appenders could be found for logger (com.zhoujiajun.pojo.StudentDAO).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.NullPointerException
at com.zhoujiajun.pojo.StudentDAO.findAll(StudentDAO.java:110)【1】
at com.zhoujiajun.test.test.main(test.java:15)【2】数据库是有连接成功,也有数据,但是查询没结果,查询会有空指针异常,不知道是哪里出问题了,希望大家有空帮我看看。。
我是Hibernate刚开始学,什么都不懂
代码用MyEclipse的DB Browser,对数据表右键,Hibernate Rever Engineering生成的代码,具体的贴上来
Student.java:
数据表的各元素的get和set
这个应该没有问题IBaseHibernateDAO.javapublic interface IBaseHibernateDAO {
public Session getSession();
}
BaseHibernateDAO.javapublic class BaseHibernateDAO implements IBaseHibernateDAO {
public Session getSession() {
//FIXME: Implement this method
return null;
}
}
StudentDAO.java(代码没全贴,因为就用了findAll() )public class StudentDAO extends BaseHibernateDAO {
private static final Logger log = LoggerFactory.getLogger(StudentDAO.class);
public static final String NAME = "name";
public static final String NUMBER = "number";
public List findAll() {
log.debug("finding all Student instances");
try {
String queryString = "from Student";
Query queryObject = getSession().createQuery(queryString);//【1】处出错
return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
}
test.javapublic class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentDAO dao = new StudentDAO();
List<Student> result = dao.findAll();//【2】处出错
for(Student o : result) {
System.out.println("编号:" + o.getIdStudent());
System.out.println("姓名:" + o.getName());
System.out.println("学号:" + o.getNumber());
}
dao.getSession().close();
}}
然后还有配置hibernate.cfg.xml<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/HibernateTest
</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">MySQL55</property>
<mapping resource="com/zhoujiajun/pojo/Student.hbm.xml" /> </session-factory></hibernate-configuration>
映射Student.hbm.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.zhoujiajun.pojo.Student" table="student" catalog="hibernatetest">
<id name="idStudent" type="java.lang.Integer">
<column name="idStudent" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="45" />
</property>
<property name="number" type="java.lang.String">
<column name="number" length="45" />
</property>
</class>
</hibernate-mapping>
mysql> use hibernatetest
Database changed
mysql> select * from student
-> ;
+-----------+------+----------+
| idStudent | name | number |
+-----------+------+----------+
| 1 | zjj | 20000101 |
| 2 | zhou | 20000102 |
+-----------+------+----------+
2 rows in set (0.03 sec)
Hibernate运行查询的时候有空指针异常,不知道是哪里的错误导致查询失败,错误贴上
log4j:WARN No appenders could be found for logger (com.zhoujiajun.pojo.StudentDAO).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.NullPointerException
at com.zhoujiajun.pojo.StudentDAO.findAll(StudentDAO.java:110)【1】
at com.zhoujiajun.test.test.main(test.java:15)【2】数据库是有连接成功,也有数据,但是查询没结果,查询会有空指针异常,不知道是哪里出问题了,希望大家有空帮我看看。。
我是Hibernate刚开始学,什么都不懂
代码用MyEclipse的DB Browser,对数据表右键,Hibernate Rever Engineering生成的代码,具体的贴上来
Student.java:
数据表的各元素的get和set
这个应该没有问题IBaseHibernateDAO.javapublic interface IBaseHibernateDAO {
public Session getSession();
}
BaseHibernateDAO.javapublic class BaseHibernateDAO implements IBaseHibernateDAO {
public Session getSession() {
//FIXME: Implement this method
return null;
}
}
StudentDAO.java(代码没全贴,因为就用了findAll() )public class StudentDAO extends BaseHibernateDAO {
private static final Logger log = LoggerFactory.getLogger(StudentDAO.class);
public static final String NAME = "name";
public static final String NUMBER = "number";
public List findAll() {
log.debug("finding all Student instances");
try {
String queryString = "from Student";
Query queryObject = getSession().createQuery(queryString);//【1】处出错
return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
}
test.javapublic class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentDAO dao = new StudentDAO();
List<Student> result = dao.findAll();//【2】处出错
for(Student o : result) {
System.out.println("编号:" + o.getIdStudent());
System.out.println("姓名:" + o.getName());
System.out.println("学号:" + o.getNumber());
}
dao.getSession().close();
}}
然后还有配置hibernate.cfg.xml<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/HibernateTest
</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">MySQL55</property>
<mapping resource="com/zhoujiajun/pojo/Student.hbm.xml" /> </session-factory></hibernate-configuration>
映射Student.hbm.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.zhoujiajun.pojo.Student" table="student" catalog="hibernatetest">
<id name="idStudent" type="java.lang.Integer">
<column name="idStudent" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="45" />
</property>
<property name="number" type="java.lang.String">
<column name="number" length="45" />
</property>
</class>
</hibernate-mapping>
解决方案 »
- 求助:学生表的专业存的是专业表的ID,浏览时候想把它显示为专业表id对应的名称mc
- JSF的问题,请教高手。这个问题困扰好几天了。。。代码写不下去了- -救命!
- JAVA&SQL取值问题
- 怎样能让收入和支出项在表格中的不同列中显示?
- (jsp)日期格式判断(比如20070520)且结束日期大于开始日期!
- 急 关于xml的问题!!!!
- getParameterValues取值不成功
- Extjs如何实现动态树形菜单?希望能给出例子
- 靠,这个问题太难了!!!
- 急!急!急!Servlet怎么从Oracle中把jpg图片显示出来?[email protected]
- Tomcat删项目删不了
- web项目加载多个webservice
public Session getSession() {
//FIXME: Implement this method
return null;
}
}
返回的都是null,肯定查询不了啦
public Session getSession() {
private static SessionFactory sessionFactory; //FIXME: Implement this method
return sessionFactory.getCurrentSession();
}
剩下的你自己再看看吧
//FIXME: Implement this method
return sessionFactory.getCurrentSession();
}
private StudentDAO dao; public List<Student> findAll(){
return dao.findAll();
}
}楼主啥都不写,,接口根本就没连接上...
这样你在页面中使用当然是不行的...
本人只是大概写了下..具体要靠楼主根据情况来改...
private StudentDAO dao; public List<Student> findAll(){
return dao.findAll();
}
}楼主啥都不写,,接口根本就没连接上...
这样你在页面中使用当然是不行的...
本人只是大概写了下..具体要靠楼主根据情况来改...
//FIXME: Implement this method
return null;
}这个方法,你需要返回一个Session,而不是null,估计你是直接快捷键出来的吧,这就跟没写有啥区别?
还有就是 private StudentDAO dao;你是打算要用Spring?那你至少也得有个Set方法吧,这只是大体思路,你可以自己百度,Google,慢慢来,把流程理清楚了数据自然就出来了,还有最重要的一点,我上学的时候经常遇到,丫的数据库添加了数据有木有Commit,嘿嘿,如果没有提交你就蛋疼咯。这只是针对Oracle跟Sqlserver来说的。
public class BaseHibernateDAO implements IBaseHibernateDAO {
public Session getSession() {
//FIXME: Implement this method
return null;
}
}
//你要获得的是session,但是结果得到了null 当然报错了
这么清楚的报错提示,自己好好找找就可以了
public Session getSession() {
//FIXME: Implement this method
return null;
}这里或的session返去就没有错误了!