Mysql 通过中文查询数据查不出结果问题

与数据为字符编码有关。若编码设置得不当,就会出现查不出结果。

 

 

   

   


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&amp;characterEncoding=utf8"

 

  这样就可以查到数据了。

你可能感兴趣的:(bean,mysql,Hibernate,jdbc)