与数据为字符编码有关。若编码设置得不当,就会出现查不出结果。
如
package org.hbyx.bean;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class DButil {
private SessionFactory sf;
public SessionFactory getSf() {
return sf;
}
public void setSf(SessionFactory sf) {
this.sf = sf;
}
public List<?> getInfo(String hql) {
Session session = sf.openSession(); //创建会话
Query q = session.createQuery(hql); //执行查询
List<?> list = q.list(); //得到结果列表
session.close();
return list; //将结果列表返回
}
@SuppressWarnings("unchecked")
public int getTotalPage(String tp, int span) { //用来得到总页数
Session session = sf.openSession(); //创建会话
Query q = session.createQuery(tp); //执行查询
List<Long> list = q.list(); //得到结果列表
int count = list.get(0).intValue(); //得到总记录条数
int page = count % span == 0 ? (count / span) : (count / span + 1); //得到总页数
session.close();
return page;
}
@SuppressWarnings("unchecked")
public List<?> getPageContent(String hql, int nowPage, int span) {//得到某页的内容
List temp = new ArrayList(); //创建List,用来存放页面内容
Session session = sf.openSession(); //创建会话
Query q = session.createQuery(hql); //执行查询
List list = q.list(); //得到结果列表
int i = 0; //标志位用来记录条数
while((nowPage-1)*span+i< list.size() && i<span) {
temp.add(list.get((nowPage-1)*span + i)); //将结果添加到temp中
i++; //标志位自加
}
session.close();
return temp; //将结果返回
}
public Object getObject(String tablename, String id) {
Session session = sf.openSession(); //创建会话
Object obj = null; //申明引用
if(tablename.equals("GoodsInfo")) { //当得到商品对象时
obj = session.get(GoodsInfo.class, id); //得到对象
} else if(tablename.equals("GoodsClassInfo")) { //当得到类别对象时
obj = session.get(GoodsClassInfo.class, id); //得到对象
}
return obj;
}
}
其中tp 和 hql为
String tp = "select count(*) from GoodsInfo where gname like '%苹果%';
String hql = "from GoodsInfo where gname like '%苹果%';
执行getInfo(String hql) 和 getTotalPage(String tp, int span) getPageContent(String hql, int nowPage, int span)
List list = q.list();
list为大小为0的list.也就是说没有查出任何符合条件的数据的结果。
这里就是因为数据库的字符集设置问题(mysql数据库存在这种问题)
可以在连接mysql数据库时在连接字符串中进行设置如:
url="jdbc:mysql://localhost:3306/db_pos?useUnicode=true&characterEncoding=utf8"
这样就可以查到数据了。