程序执行hibernate语句查询到数据库里的char型字段,返回的只有该字段的首字母

来源:互联网 发布:乐华电视软件下载 编辑:程序博客网 时间:2024/06/06 12:33

 

用的mysql数据库,原表结构:

id  int,
name varchar(10),
age int,
role  char(20)

@Test
public void findBySql(){
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-hibernate.xml");
UserDao dao = ac.getBean("userDao", UserDao.class);
String sql="select name,age,role from tbl_user_info";
List<Object[]>list=dao.findAllBySql(sql);

System.out.println("*role1*:"+list.get(0)[2]);
System.out.println("*role2*:"+list.get(1)[2]);
System.out.println("*role3*:"+list.get(2)[2]);
}

当role字段设置为定长字符char(20)型测试时,控制台输出只有字段首字母:

*role1*:p
*role2*:d
*role3*:d

当把role字段改为可变字符varchar(20)型测试时,控制台输出了完整字段:

*role1*:professor
*role2*:doctor
*role3*:database

查找资料,原来是因为:char类型在java中只占2个字节即1个字符大小,所以数据库里的char类型字段传过来后保持类型不变,就只能保留住一个字符了。

解决方法:

1、修改SQL为:select name,age,trim(role) from tbl_user_info;

2、或者将数据库里的字段类型修改为varchar型。






阅读全文
1 0
原创粉丝点击