中文字段传进sql语句里拼出来的sql是乱码

时间:2021-09-04 07:56:58
 public List getOrganizationInfoByLikeName(
String likeName) throws UnsupportedEncodingException {
     //String name = new String(likeName.getBytes("UTF-8"),"GBK");
String sql = "from OrganizationInfo org where org.name like '"+likeName+"%'";
return getHibernateTemplate().find(sql);
}
拼出来的sql条件语句字段是乱码导致查询不到记录,怎么处理?

Hibernate: select organizati0_.ID as ID, organizati0_.CODE as CODE10_, organizati0_.NAME as NAME10_, organizati0_.YJ_ORGANIZATION_CODE as YJ4_10_, organizati0_.LOGIC_CODE as LOGIC5_10_, organizati0_.ORG_TYPE as ORG6_10_, organizati0_.ORG_PERIOD_TYPE as ORG7_10_, organizati0_.PARENT_ORG_ID as PARENT8_10_, organizati0_.FITECH_FILLER as FITECH9_10_, organizati0_.FITECH_CHECKER as FITECH10_10_, organizati0_.FITECH_PRINCIPAL as FITECH11_10_, organizati0_.IS_DELETED as IS12_10_, organizati0_.conver_code1 as conver13_10_, organizati0_.conver_code2 as conver14_10_, organizati0_.conver_code3 as conver15_10_, organizati0_.ORG_FLAG as ORG16_10_, organizati0_.SUM_FLAG as SUM17_10_, organizati0_.RH_ORG_CODE as RH18_10_, organizati0_.RH_LOC_CODE as RH19_10_, organizati0_.RH_SYSTEM_CODE as RH20_10_, organizati0_.RHN_ORG_CODE as RHN21_10_, organizati0_.RHN_SYSTEM_CODE as RHN22_10_ from ORGANIZATION_INFO organizati0_ where organizati0_.NAME like '????%'

8 个解决方案

#1


界面上面的编码格式是什么呢,是不是和后台的不一致啊,跟踪进去看看是什么地方变成乱码的,找到问题原因就好办了

#2


String name = new String(likeName.getBytes("iso8859-1"),"GBK");

#3


前后台编码统一就好了

#4


String name = new String(likeName.getBytes("iso8859-1"),"GBK"); 
或者
String name = new String(likeName.getBytes("iso8859-1"),"UTF-8"); 
这个要看你设置的编码格式了 
楼主的问题是中文传递乱码的问题 问题不在sql就传参的问题 楼主调试一下代码解决传参的乱码问题就好了

#5


首先看前台和你后台的编码是一致。如果一样就可以直接传递。如果不一致则可以使用String name = new String(likeName.getBytes("iso8859-1"),"GBK");   iso8859-1代表解码规范这个看你前台是什么编码  gbk代表再次的编码规范这个就是你后台的编码了。

#6


为什么还要把UTF-8转成GBK,统一UTF-8不是挺好?

#7


引用 4 楼 a597926661 的回复:
String name = new String(likeName.getBytes("iso8859-1"),"GBK"); 
或者
String name = new String(likeName.getBytes("iso8859-1"),"UTF-8"); 
这个要看你设置的编码格式了 
楼主的问题是中文传递乱码的问题 问题不在sql就传参的问题 楼主调试一下代码解决传参的乱码问题就好了


同意这样的解决方式;

#8


<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
问题解决,同样也谢谢楼上同仁的帮忙。

#1


界面上面的编码格式是什么呢,是不是和后台的不一致啊,跟踪进去看看是什么地方变成乱码的,找到问题原因就好办了

#2


String name = new String(likeName.getBytes("iso8859-1"),"GBK");

#3


前后台编码统一就好了

#4


String name = new String(likeName.getBytes("iso8859-1"),"GBK"); 
或者
String name = new String(likeName.getBytes("iso8859-1"),"UTF-8"); 
这个要看你设置的编码格式了 
楼主的问题是中文传递乱码的问题 问题不在sql就传参的问题 楼主调试一下代码解决传参的乱码问题就好了

#5


首先看前台和你后台的编码是一致。如果一样就可以直接传递。如果不一致则可以使用String name = new String(likeName.getBytes("iso8859-1"),"GBK");   iso8859-1代表解码规范这个看你前台是什么编码  gbk代表再次的编码规范这个就是你后台的编码了。

#6


为什么还要把UTF-8转成GBK,统一UTF-8不是挺好?

#7


引用 4 楼 a597926661 的回复:
String name = new String(likeName.getBytes("iso8859-1"),"GBK"); 
或者
String name = new String(likeName.getBytes("iso8859-1"),"UTF-8"); 
这个要看你设置的编码格式了 
楼主的问题是中文传递乱码的问题 问题不在sql就传参的问题 楼主调试一下代码解决传参的乱码问题就好了


同意这样的解决方式;

#8


<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
问题解决,同样也谢谢楼上同仁的帮忙。