如何从 ResultSet 中获取值?

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我已经拥有的。

use*_*300 1

ResultSet即使您可以让它工作,长期的维护也会面临噩梦,即对象构造函数中的参数顺序可能与(RDB 中的表)中的列顺序不匹配。例如,如果您的Person对象有一个采用名字、姓氏的构造函数,则数据库表中的列的顺序可能不匹配。它可以是 LAST_NAME、FIRST_NAME,甚至是 FIRST_NAME、SOME_COLUMN_YOU_DONT_CARE_ABOUT、LAST_NAME。

在我看到更通用地处理这个问题的代码中,他们使用域对象(例如 Person)的反射来获取属性名称(在我的例子中,他们查看了 setter,而不是构造函数,YMMV),然后尝试将它们匹配到列ResultSet名称,使用ResultSet.getMetaData().