/**
* 根据反射,查询多条数据
*
* @param sql
* @param params
* @param cls
* @return
* @throws Exception
*/
public <T> List<T> findMoreResult(String sql, List<Object> params,
Class<T> cls) throws Exception {
pstmt = conn.prepareStatement(sql);
List<T> list = new ArrayList<T>();
int index = 1;
if (params != null && !params.isEmpty()) {
for (int i = 0; i < params.size(); i++) {
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int colLen = metaData.getColumnCount();
while (resultSet.next()) {
T resultObject = cls.newInstance();
for (int i = 0; i < colLen; i++) {
String colName = metaData.getColumnName(i + 1);
Object colValue = resultSet.getObject(colName);
if(colValue == null){
colValue = "";
}
Field field = cls.getDeclaredField(colName);
field.setAccessible(true);
field.set(resultObject, colValue);
}
list.add(resultObject);
}
return list;
}
这是别人封装的一个jdbc的工具类型,一般的类型都能处理,就是碰到mysql中的date类型的数据的时候,就出问题了</br>
当在java bean中定义成String类型与date类型对应的时候就报Can not set java.lang.String field com.example.bean.User.birthday to java.sql.Date这个错误当定义成java.sql.Date 类型的时候就报Can not set java.sql.Date field com.example.bean.User.birthday to java.lang.String这个错误
------解决方案--------------------
尝试使用java.util.Date