2 qq 24756229 qq_24756229 于 2016.09.18 10:15 提问

jdbc连接MySQL数据库查询中文数据查询不出来,数据库无乱码现象。 20C

public List queryByNiC2(String nickName){
List list=new ArrayList();

    try {
        conn=DbManager.getConn();
        String sql="select * from snsuserinfo where nickName like "+"'%"+nickName+"%'";
        ps=conn.prepareStatement(sql);
        System.out.println(sql);
        rs=ps.executeQuery();
        System.out.println(rs.getRow()+"rs的长度");
        while(rs.next()){
            SNSUserInfo sns=new SNSUserInfo();
            sns.setId(rs.getInt("id"));
            sns.setOpenId(rs.getString("openId"));
            sns.setNickName(rs.getString("nickName"));
            sns.setCity(rs.getString("city"));
            sns.setHeadImgUrl(rs.getString("headImgUrl"));
            sns.setSex(rs.getInt("sex"));
            sns.setAttentionTime(rs.getString("attentionTime"));
            sns.setAuthNum(rs.getInt("authNum"));
            list.add(sns);
        }


    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return list;


}

8个回答

of214
of214   2016.09.18 12:55

拼接SQL会有SQL注入问题
模糊查询这样写试一下
conn=DbManager.getConn();

    String sql="select * from snsuserinfo where nickName like "+"'%"+nickName+"%'";

    ps=conn.prepareStatement(sql);

            改成

            conn=DbManager.getConn();

    String sql="select * from snsuserinfo where nickName like  ?";

    ps=conn.prepareStatement(sql);

            ps.setString(1, "'%"+nickName+"%'");

可以看下这篇文章 http://58coding.com/article/detail/24615460515348831

XiaoXiao_RenHe
XiaoXiao_RenHe   2016.09.18 10:25

你在mysql中查询有结果吗?
select * from snsuserinfo where nickName like "%王五%";

Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.18 10:27
 这跟数据库有关,如果是像MySQL,d like '%date%'是能完成模糊查询的功能,但像oracle的数据库,这样的语句就未必能完成,不过你可以试着to_char函数来实现类似的功 能:to_char(date, 'yyyy-MM-dd') like '2010-07-06',也可以通过to_date函数来实现搜索: date like to_date('2010-7-6','yyyy-MM-dd')
yicp123
yicp123   2016.09.18 11:33

mysql字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级

你查下你各级别字符集跟校对规则,修改成你需要的字符集及校对规则就可以了。

参考自:
MySQL的字符集和校对 http://www.data.5helpyou.com/article332.html

feihn
feihn   2016.09.18 14:36

MySQL修改成UTF8字符集试试看

u012930316
u012930316   2016.09.18 17:32

这个我曾经遇到过..你这个情况是不是 nickName 不是中文就可以查到????如果是的话那就是mysql的问题,我们当时是重新装了个mysql就解决了,当然,如果你不想重新装mysql的话,你这sql可以转下16进制,
附代码

public static String str2HexStr(String str) throws UnsupportedEncodingException {
        if (str==null) {
            return "";
        }
        char[] chars = "0123456789ABCDEF".toCharArray();
        StringBuilder sb = new StringBuilder("");

        byte[] bs = str.getBytes("utf-8");
        int bit;

        for (int i = 0; i < bs.length; i++) {
          bit = (bs[i] & 0x0f0) >> 4;
          sb.append(chars[bit]);
          bit = bs[i] & 0x0f;
          sb.append(chars[bit]);
        }
        return sb.toString().trim();
}

在java中调用

 String sql="select * from snsuserinfo where HEX(nickName) like "+"'%"+str2HexStr(nickName)+"%'";

 这样就可以查出来了.
 可以的话采纳下.不明白可以追问.
qq491592452
qq491592452 回复qq491592452: 我今天还真的是碰到这种问题了
4 个月之前 回复
qq491592452
qq491592452 为什么呢?有没有啥参考资料可以查?
4 个月之前 回复
xubo_ob
xubo_ob   2016.09.18 18:05

建议排查方法 :

1、将后面的like什么都去掉,直接select * 看查询出来的中文是否OK

2、如果OK就把参数nickName转为UTF-8试试,看是否OK 。 new String(nickName.getBytes(),"utf-8");

3、如果第二步不OK就直接把SQL拿到cmd或者客户端进行查询

u010078032
u010078032   2018.06.14 09:46

"jdbc:mysql://"
+ uri
+ ":"
+ port
+ "/"
+ dbName
+ "?useSSL=true&useOldAliasMetadataBehavior=true&useUnicode=true&characterEncoding=utf8";

连接的时候要带上字符编码相关参数
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA通过JDBC连接Mysql获取中文输出乱码解决方法
情景:写一个java程序,通过jdbc 连接Mysql数据库,读取数据,打印出来发现中文是乱码。
JDBC连接mysql处理中文时乱码的一种解决办法
近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb2312的编码,但是,直接使用jdbc操作,从库中读取出来的中文全都是乱码。一开始,使用类似entity.setDepartName(new String(rs.getString("hg").getBytes("
java jdbc 链接mysql插入数据中文显示乱码
java jdbc 链接mysql插入数据中文显示乱码,自己在解决过程中的解决方案,以及自己遇到的一些问题,之前一直记再云笔记上,和大家分享出来。
MySQL jdbc连接异常信息中文乱码
现象: MySQL jdbc连接异常信息中文乱码java.sql.SQLException: Incorrect integer value: 'ä½ å¥½' for column 'user_id' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jd
jdbc mysql 中文乱码问题的解决
这两天在调试www.cnblogs.com/ericsun/archive/2011/11/25/2263062.html 可是在最简单的读写MySQL中文的时候出现了问题,跟以前调试J2EE程序时候遇到的一样。 症状就是:Java代码调用JDBC来读写MySQL数据库,我仔细检查了MySQL的设置 我确认了: 1.表的charset我都设置成了utf8 collation
jdbc 写入mysql 中文乱码
解决办法:      1.创建数据库时将数据库的缺省字符集指定为gbk。建议用工具(如phpmyadmin等)     2.修改Client默认字符集为UTF-8。windows下在mysql安装目录下找到my.ini,将做如下更改default-character-set=utf8,然后重起mysql服务即可将数据库默认字符集改为UTF-8.此时应该在mysql命令行用\s命令检查一下看是否
JDBC连接MySQL抛出异常信息乱码
java连接MySQL时,数据库和java文件以及数据库连接都设置成了UTF-8,但是当操作数据库抛出异常时,异常信息中的中文乱码,但是读写数据库正确时,数据没有乱码,造成这种原因是因为mysqljdbc驱动中存在一个errorMessageEncoding变量为CP1252,用于编码错误信息,此变量为私有,这是造成乱码的最终原因,我的解决方法是获得connection之后,使用反射修改这个变量值
JMeter JDBC连接Mysql时的乱码问题
1、Mysql如果编码为: mysql> show variables like 'char%'; +--------------------------+-----------------------------+ | Variable_name            | Value                       | +--------------------------+
mysql的查询及连接JDBC数据库
查询记录 查询表达式 每个表达式表示想要的一列,必须至少一个。 多个类之间以英文逗号分隔。 “*”号表示所有列 例如 只查询id和name两列 SELECT id,name FROM student; WHERE 条件表达式 对记录进行过滤,如果没有指定WHERE自居,则显示所有记录。 在WHERE表达式中,可以使用MySQL支持的杉树或运算符。 例如: 查询id为偶数的
java jdbc连接mysql 查询数据查找不到
jdbc连接mysql的字符串 添加字符编码