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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值