执行SQL查询数据表的char型字段只返回了该字段首字母问题的解决

 

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

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

@Test
public void findBySql(){
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-mvc.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型。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值