我需要从 ResultSet
中检索值,以通过反射使用它们来调用构造函数。
我尝试使用 Class.cast(Object),但我总是得到一个 InvalidCastException
。
这是我的:
Object[] args = new Object[count];
Class<?>[] arr = co.getParameterTypes();
for(i = 0; i<args.length; i++){
args[i] = arr[i].cast(rs.getObject(i+1));
}
Object t;
try {
t = co.newInstance(args);
} catch (Exception e) {
throw new RuntimeException(e);
}
return (T)t;
co 是构造函数,rs 是我已有的 ResultSet
。
最佳答案
即使你能让它工作,也有一个长期的维护噩梦,对象的构造函数中的参数顺序可能与 ResultSet
中的列顺序不匹配(表在 RDB 中)。例如,如果您的 Person
对象有一个采用 firstName、lastName 的构造函数,则 DB 表中列的顺序可能不匹配。它可以是 LAST_NAME、FIRST_NAME,甚至是 FIRST_NAME、SOME_COLUMN_YOU_DONT_CARE_ABOUT、LAST_NAME。
在我看到的更一般地处理这个问题的代码中,他们使用域对象(例如 Person)上的反射来获取属性名称(在我的例子中,他们查看了 setter,而不是构造函数,YMMV),然后尝试使用 ResultSet.getMetaData()
将它们与 ResultSet
列名匹配。
关于java - 一般如何从 ResultSet 中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17383501/