Can not set java.lang.Integer field com.glut.api.utils.BnakCustomer.money to null value
这是错误码,我在网上搜说查询到的int有可能是null,然后我改成了Integer,然后他说Integer也不能为null,为什么啊,而且我的数据库里也没有为null的数据
下面是封装在BaseDao类的一个方法
public <T> List<T> excuteQuery(Class<T> clazz, String sql, Object... params) throws SQLException, InstantiationException, IllegalAccessException, NoSuchFieldException {
//获取连接
Connection connection = JdbcUtilsV2.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//?赋值
if(params!=null&¶ms.length!=0){
for (int i = 1; i <= params.length; i++) {
preparedStatement.setObject(i,params[i-1]);
}
}
//接收结果
ResultSet resultSet = preparedStatement.executeQuery();
//解析结果
List<T> list=new ArrayList<>();
//metaData 装的当前结果集列的信息对象
ResultSetMetaData metaData = resultSet.getMetaData();
//可以这样水平遍历列
int columnCount = metaData.getColumnCount();
while(resultSet.next()){
//一行数据对应一个T类型对象
T t =clazz.newInstance();//调用类的无参构造函数实例化对象
//自动遍历列 要从1开始,并且小于等于总列数
for(int i=1;i<=columnCount;i++){
//获取指定对象下角标的值 resultSet
Object value = resultSet.getObject(i);
//获取指定列的下角标的列的名称 ResultSetMetaData
//getColumnLabel:会获取别名,没有别名才是列名 getColumnName:只会获取名称
String propertyName = metaData.getColumnLabel(i);
//反射,给对象的属性值赋值
Field field = clazz.getDeclaredField(propertyName);
field.setAccessible(true);//属性可以设置,打破private的修饰限制
/**
* 参数1:要赋值的对象 如果属性是静态,第一个参数可以为null
* 参数2:具体的属性值
*/
if(value!=null&&t!=null){
field.set(t, value);
}
}
list.add(t);
}
//关闭资源
resultSet.close();
preparedStatement.close();
if(connection.getAutoCommit()){
//没有事务,可以关闭
JdbcUtilsV2.freeConnection();
}
return list;
}
这个是一个测试方法,用来查询
@Test
public void testSelect() throws Exception {
//3.编写SQL语句
String sql = "select * from t_bank where id =?";
//BnakCustomer u =new BnakCustomer();
List<BnakCustomer> users = excuteQuery(BnakCustomer.class, sql,1);
System.out.println(users);
}
用来接收数据的类
public class BnakCustomer {
Integer id;
String account;
Integer money;
}
这是数据库的具体数据