at dao.impl.JDBCTemplatePersonDaoImpl.findById(JDBCTemplatePersonDaoImpl.java:30)
错误原因:从数据库取出来数值型的值为:BigDecimal
错误代码:
//这行并未报错,只有运行时才出错 int p_age=(Integer) personMap.get("AGE"); 正确:int p_age=((BigDecimal) personMap.get("AGE")).intValue();
原代码类如下:
package dao.impl;
import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import dao.PersonDao;
import entity.Person;
public class JDBCTemplatePersonDaoImpl implements PersonDao {
private JdbcTemplate jdbcTemplate;
//通过IOC注入数据源后,初始始化jdbcTemplate对象
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public Person findById(Long id) {
//通过queryForList执行sql语句,返回结果集,结果集类型为Map
List person=jdbcTemplate.queryForList("select * from person where id="+id.longValue());
Iterator it=person.iterator();
while(it.hasNext()){
Map personMap=(Map) it.next();
Long p_id=((BigDecimal)personMap.get("ID")).longValue();
String p_name=(String) personMap.get("NAME");
int p_age=((BigDecimal) personMap.get("AGE")).intValue();
Person p=new Person();
p.setId(p_id);
p.setName(p_name);
p.setAge(p_age);
return p;
}
return null;
}
}