使用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号”
    
    ,能够保存数据,没有错误抛出了。
   
 
