案例代码如下:
String sql = " SELECT deviceid, sn, mcuversion FROM tcvendordevice where parkid = ? ";
List tcvendordeviceList = jdbcTemplate.queryForList(sql, parkID);
Iterator it = tcvendordeviceList.iterator();
sql = ".......... ";
jdbcTemplate.query(sql, new DAORowMapper<Device>(Device.class, new RowCallback<Device>() {
@Override
public void callback(Device data) {
if(tcvendordeviceList.size() > 0){
while (it.hasNext()){
Map<String,String> queryData = (Map<String,String>) it.next();
if(queryData.get("deviceid").toString().equals(String.valueOf(data.getDeviceID()))*){
data.setSn(String.valueOf(queryData.get("sn")));
......................
在执行的时候第二个if语句一直报错“java.lang.Integer cannot be cast to java.lang.String”。开始以为是queryData.get(“deviceid”)为int而后面为String,后来再仔细看数据库的字段,在数据库里字段类型为:
deviceid
int(11) NOT NULL,
sn
varchar(64) NOT NULL,
mcuversion
text COMMENT ‘XXXXXX’,
原来是Map的定义为<String,String>,从而和deviceid的int匹配不上。
解决方法,将map的value定义为Object,这样子字段类型基本上可以对上。