Joã*_*lli 5 java generics jdbc resultset
我需要从 a 中检索值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;
Run Code Online (Sandbox Code Playgroud)
co 是构造函数,rs 是ResultSet
我已经拥有的。
ResultSet
即使您可以让它工作,长期的维护也会面临噩梦,即对象构造函数中的参数顺序可能与(RDB 中的表)中的列顺序不匹配。例如,如果您的Person
对象有一个采用名字、姓氏的构造函数,则数据库表中的列的顺序可能不匹配。它可以是 LAST_NAME、FIRST_NAME,甚至是 FIRST_NAME、SOME_COLUMN_YOU_DONT_CARE_ABOUT、LAST_NAME。
在我看到更通用地处理这个问题的代码中,他们使用域对象(例如 Person)的反射来获取属性名称(在我的例子中,他们查看了 setter,而不是构造函数,YMMV),然后尝试将它们匹配到列ResultSet
名称,使用ResultSet.getMetaData()
.
归档时间: |
|
查看次数: |
503 次 |
最近记录: |