楼上的 你说的是转数据库的字符集吗?我在查询分析器里可以查带中文条件的SQL语句啊

解决方案 »

  1.   

    查询的时候不要使用  + 号 来做 
    要用 set 做  这样就能传过来了
      

  2.   

    与数据库的字符编码有关系。
    把HQL语句改以下。
    "from KdNews as news where 1=1  and news.title  like '%raun%' and news.people like '%"+new String("许".getBytes("当前编码方式"),"数据库编码方式").toString()+"%'"
      

  3.   

    查询的时候不要使用  + 号 来做 
    要用 set 做  这样就能传过来了能具体点吗?
      

  4.   

    把传进去的值打印出来,
    如果是乱码,就是你程序自身的问题,配个过滤器就可以了。如果不是乱码,那就是hibernate版本的问题,换最新的hibernate版本就能解决问题
      

  5.   

    比如  你现在可能是使用的   
    Query query = s.createQuery("from News news where news.id=:id");
    query.setInteger("id",id);
    或者用
    Query query = s.createQuery("from News news where news.name like ? ");
    query.setString(0,"%" + name + "%");
    query.setXXXXXX    这里有好多属性的 
    自己查一下
      

  6.   

    恩,用query.setParameter是可以解决这个问题的
      

  7.   

    我贴一个我处理的方法,仅供参考:
    /**
     * 根据hibernate查询语句和查询参数数组进行查询,采用HQL方式查询
     * @param sql 查询语句
     * @param obj 查询参数数组
     * @return list结果集
     */
     public List find(String sql, Object[] obj) {
         List list = new ArrayList();
         Session s = null;
         Transaction tx = null;
         try{
    s = this.getSessionFactory().openSession();
    tx = s.beginTransaction();
    Query query = s.createQuery(sql);
    for(int i=0;i<obj.length;i++){
        query.setParameter(i, obj[i]);
    }
    list = query.list();
    tx.commit();
        }catch(HibernateException e){
    if(tx!=null)
        tx.rollback();
        }finally{
             try{
        if(s!=null && s.isOpen())
    s.close();
    }catch(HibernateException e){
    e.printStackTrace();
    }
         }
         return list ;
    }
      

  8.   

    在下认为一句就可以了,象这种参数问题,不需要用过滤器就可以.好象即使用了,过滤器对这种参数不管用(至少我用了过滤器但是在传中文时一样是乱码)
    String name=new String("李三".getBytes("8859_1"),"gb2312");
    一般参数是这样