首先问题原因如下:
在查询语句里面Mysql返回的字段名称为数据库字段的名称格式。如:fileName字段 输出 fileName
但,oracle数据库返回的字段名称则全部为大写字段。如:fileName字段 输出 FILENAME
所以,当两中数据库都用如下方法去匹配类中对应的字段变量时,会报如下错误
java.lang.IllegalArgumentException: Could not find field [LOCATION] on target [Student [flowId=0, type=0, idCard=null, examCard=null, studentName=null, location=null, grade=0]]
这是因为大小写的问题,Oracle是没有办法进行操作,而导致配不到该字段所致。
// 5. 若 Map 不为空集, 利用反射创建 clazz 对应的对象
if (values.size() > 0) {
entity = clazz.newInstance();
// 5. 遍历 Map 对象, 利用反射为 Class 对象的对应的属性赋值.
for (Map.Entry<String, Object> entry : values.entrySet()) {
String fieldName = entry.getKey();
Object value = entry.getValue();
ReflectionUtils.setFieldValue(entity, fieldName, value);
}
}
作为替代办法,我现在改用 Beanutils 类进行修改。主要使用该类下的setProperty()方法。
BeanUtils.setProperty(Object, name, value);
Object :是实例化的类