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

本文介绍了一个因字符编码设置不当导致数据库查询失败的问题,并提供了解决方案。通过调整连接字符串中的字符集参数,成功解决了查询不到数据的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

   

   


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"

 

  这样就可以查到数据了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值