使用spring的jdbcTemplate模板中的queryForObject()传入中文,报错expected 1, actual 0
我在做练习时,远程调用服务,该服务是自己写的一个简单小项目,调用的是如下方法:
public String findDecidedzoneIdByAddress(String address) {
String sql = "select decidedzone_id from t_customer where address = ?";
System.out.println(address);
String decidedzoneId = jdbcTemplate.queryForObject(sql, String.class, address);
System.out.println(decidedzoneId);
return decidedzoneId;
}
我是从客户表中根据客户地址查询客户所在的定区id,要传入的参数
address=北京市西城区长安街100号
结果抛出了一个异常,
我的那张查询表如下
我自己上网查询了一下,报错的原因网上说是查询出来的结果集不是1,而是0或者>1;
也就是不是单行单列, 但是上表中
address=“北京市西城区长安街100号”
,只有一个,我又在数据库中进行查询
完全能够查询到,后面我把远程调用的方法findDecidedzoneIdByAddress()中的sql改成了
按照telephone
进行查询
String sql = "select decidedzone_id from t_customer where telephone = ?";
我传入了一个
telephone=“13811111111”
,结果不会报错,能够查询到结果,所以我猜想应该是spring模板jdbcTemplate中的queryForObject()不支持中文查询吧,因为我的db.properties中的字符编码设置在搭建项目时已经设置过了
jdbc.jdbcUrl=jdbc:mysql:///bos32?useUnicode=true&characterEncoding=utf8
最后我将代码修改成了如下形式,
public String findDecidedzoneIdByAddress(String address) {
String sql = "select decidedzone_id from t_customer where address = ?";
System.out.println(address);
byte[] bytes = address.getBytes();//采用将中文字符串转化成字节数组形式
String decidedzoneId = jdbcTemplate.queryForObject(sql, String.class, address);
System.out.println(decidedzoneId);
return decidedzoneId;
}
这样在页面中再次输入
address=“北京市西城区长安街100号”
,能够保存数据,没有错误抛出了。