java 获取数据库表中的信息,为什么中文字段读出为null

java 获取数据库表中的信息,为什么中文字段读出为null

问题描述:

java 获取数据库表中的信息,为什么中文字段读出为null,其他字段为数字都读出来了

 JdbcUtil jdbcUtil = null;
        try{
            jdbcUtil = new JdbcUtil();
            //获取数据库连接
            jdbcUtil.getConnection();
            // 查询结果是一个map,要遍历出来,然后放到对象里
            List<Map<String, Object>> mapList = jdbcUtil.findResult(sql.toString(), paramList);
            if(mapList != null){
                for(Map<String, Object> map : mapList){
                    // 此处把map转化为Student对象
                    Student s = new Student(map);
                    result.add(s);                  

                    // 输出的学生信息,中文字段为null:Student [id=1, stuName=null, age=17, gender=1, address=null]
                    System.out.println( "学生信息:"+ s);
                }
            }
        }catch(SQLException e){
            throw new RuntimeException("查询所有数据异常!", e);
        }finally{
            if(jdbcUtil != null){
                //一定要释放资源
                jdbcUtil.releaseConn();
            }
        }       

数据库查询信息:
图片说明
图片说明

  • 检查Student构造器,stuName是否有设置
  • 检查数据库,stuName对应字段是否有值
  • 检查stuName时候和对应表字段相符(例如表中是stu_name_
  • 如果以上都正确,打断点,单步调试,实时查看map中的值

确定数据库中不是空?
直接用sql查询语句,查数据库看看

数据库编码设置为UTF-8

你也要把sql查询数据库所查询出的信息发上啊

List> mapList = jdbcUtil.findResult(sql.toString(), paramList); 这行打个断点 然后debug看一下,, 或者把你的完整代码贴出来

查看sql语句看看有没有查询stuName

数据库的字符类型为varchar时,当改字段的值为空时,数据库给的默认值是null,这种情况可以在查询语句中使用函数判断去除null值;
Oracle的对应函数是nvl(字段,替换的值),MySQL的对应函数是ifnull(字段,对应的值),
比如:select nvl(zd, '') from table_name,意思是当zd的值为空时,让zd的值变成 ''
同理,MySQL也是一样:select ifnull(zd, '') from table_name

你把中文字段 改几个为拼音看看是不是因为中文的问题。排除了这个问题再确定排除问题的思路。

吧Student 类代码贴出来看看

1,for(Map map : mapList){这行打个断点 看看每次循环,map中对应位置是否有值。2,在mysql中的数据库编码设置一下

跟中文字段没关系 主要是你数据库中的 列名stu_name 映射到stuName 你没有映射上去 当然student对象中默认的stuName属性就是null

Student实体中的stuName变量与map中的key不应不上,你可以做一个处理,将map中的stu_name 转换一下,或者在map中再加一个key为stuName;在Student s = new Student(map)之前加一个 map.put('stuName',map.get("stu_name"));

我今天出现了一样的问题,将查出来为null的字段的编码设置成utf-8就行了