使用spring的jdbcTemplate模板中的queryForObject()传入中文,报错expected 1, actual 0

  • Post author:
  • Post category:其他




使用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号”

,能够保存数据,没有错误抛出了。



版权声明:本文为weixin_42114076原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。