当前位置:编程学习 > JAVA >>

java连mysql中文查询不出来的问题??

我使用的是java联mysql,但是查询时出现问题,总查不出数据,我把sql语句打印了一下,select * from product where name like '%德国%',在mysql客户端可以查询出来,但在程序中就是查不出数据,请问怎么解决。 --------------------编程问答-------------------- 上代码,链接数据库和实现查询的代码、、、、、 --------------------编程问答-------------------- 查询英文显示正确
public List getAllProductByName(String productName) {
List allProduct = new ArrayList(); 
PreparedStatement psmt = null;
ResultSet rs = null;
db = new DButil();
sql = "select * from product where name like '%"+productName+"%'";
System.out.println(sql);
try {
psmt = db.getConnection().prepareStatement(sql);
psmt.execute("set Names utf8"); 
rs = psmt.executeQuery();
while(rs.next()){
Product product = new Product();
product.setId(rs.getInt("id"));
product.setName(rs.getString("name"));
product.setPhoto1(rs.getString("photo1"));
product.setPhoto2(rs.getString("photo2"));
product.setPhoto3(rs.getString("photo3"));
product.setPrice(rs.getFloat("price"));
product.setWeight(rs.getInt("weight"));
product.setStock(rs.getInt("stock"));
product.setRecommendChanies(rs.getString("recommendChanies"));
System.out.println("1111111111111111111111111111111111");
allProduct.add(product);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
rs.close();
psmt.close();
db.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(allProduct.toString()+"aaaaaaaaaaaaaaaaaa");
return allProduct;
}



--------------------编程问答-------------------- 说明你的中文存储乱码了……mysql客户端查询不会有问题,但是程序查询时,数据库乱码,所以查不到……楼主先看看mysql编码是不是和你的程序一致吧……以前就碰到过这个问题 --------------------编程问答-------------------- 我打印psmt时出现乱码
打印sql字符串:select * from product where name like '%德国%'
打印psmt:
com.mysql.jdbc.JDBC4PreparedStatement@776caa: select * from product where name like '%??%' --------------------编程问答-------------------- 在前台encodeURI()  后台URLDecode --------------------编程问答-------------------- 5楼正解 嘎嘎  --------------------编程问答-------------------- 如果参数不多的话是可以用encodeURI()的 不过最好是用两次转码,如果参数多的话,用表单提交吧 --------------------编程问答-------------------- 估计是乱码。把mysql的字符集和你项目的指定成一样的 --------------------编程问答-------------------- 安装mysql时,要选择那个"日本话"选项。 --------------------编程问答-------------------- 提交至数据库时乱码了。中文乱码很常见。 --------------------编程问答-------------------- 这么用吧encodeURI(encodeURI())
java中
java.net.URLDecoder类的decode(String s, String enc)方法,解码 --------------------编程问答-------------------- 乱码了
检查下数据库安装时选择的编码  以及你程序的编码 --------------------编程问答-------------------- 小哥,你要学会debug啊,相信你会有惊喜的 --------------------编程问答-------------------- 有些问题自己要先定位 --------------------编程问答-------------------- 以下2种方法只对post方式起作用:
1)程序开始执行的时候设置request.setCharacterEncoding("UTF-8")或者request.setCharacterEncoding("GBK") , 然后再request.getParameter("参数名")获取的值就正常了,这种方法比较麻烦,每个方法都需要写,如果只是测试的话,临时用下就可以了. 如果只正式的项目,推荐方法2 
2)写个过滤器加到web.xml里,针对特定的后缀设置编码(我比较懒,直接用的spring写好的过滤器,你可以自己写个哈.以下过滤器只对后缀是.jsp的请求起作用, 你可以自行设置后缀名)


<!-- 配置编码方式为UTF-8 -->
<filter> 
        <filter-name>encodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param> 
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value> 
        </init-param> 
    </filter> 
    <filter-mapping>
     <filter-name>encodingFilter</filter-name>
     <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

如果是get方式请求的数据,上面两种方法就不起作用了,如果服务器是tomcat的话,需要在server.xml的connector加上一个 URIEncoding="UTF-8" 或者  URIEncoding="GBK" 就可以了,具体在哪里加, GOOGLE or Baidu 
--------------------编程问答-------------------- 重启myeclipse。不行再重启机子 --------------------编程问答-------------------- 把错误粘贴一下  要不你让我们猜吗
--------------------编程问答-------------------- 乱码 大多都是没有设置编码的问题,特别是当出现查询中文乱码是。去看看masql的配置 --------------------编程问答-------------------- 要解决这个问题,你必须先debug找到第一个出现乱码的位置,从上到下我就不信找不出问题
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,