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就行了