Похоже, что вы пытаетесь создать собственное простое решение ORM, в котором вы предоставляете метод со строкой и типом SQL, метод загружает результаты, а затем создает экземпляр типа, сопоставляя результирующий набор с полями объекта с помощью установщиков.
Если это так, вы изобретаете велосипед.
Полным решением было бы использование инструмента ORM, такого как Hibernate или Top Link, но он может быть запущен до того, как вы сможете ходить. Если вы предпочитаете детские шаги, рассмотрите возможность использования Spring Jdbc Template для обработки большого количества стандартного кода.
UPDATE
ОК, я спросил, ищите ли вы метод, который взял бы набор результатов и сопоставил его с произвольным классом, и вы сказали «да». Это должно сделать что-то вроде этого:
public <T> List<T> map(ResultSet rs, Class<T> clazz) throws Exception {
//// Build a list of columns that are in the resultset
List<String> columns = new LinkedList<>();
ResultSetMetaData metaData = rs.getMetaData();
for(int i=0; i < metaData.getColumnCount(); i++) {
columns.add(metaData.getCatalogName(i));
}
//// Create a list to hold all the beans we are going to create from the resultset
List<T> rows = new LinkedList<>();
//// Iterate over each row in the resultset, creating beans for each row and setting the values
while(rs.next()) {
//// Create a new instance of the class passed in (must have a no-args constructor)
T row = clazz.newInstance();
//// Now for the magic. This bit is very noddy and ORM packages will do this much better
for(String col : columns) {
//// For each column that is in the resultset, find the setter in the bean class
String columnValue = rs.getString(col);
String mutator = "set"+capitalizeFirstCharacter(col);
Method m = clazz.getMethod(mutator, String.class);
//// Invoke the setter, passing in the value from the resultset
m.invoke(row, columnValue);
}
rows.add(row);
}
return rows;
}
private static String capitalizeFirstCharacter(String s) {
return s.substring(0, 1).toUpperCase() + s.substring(1);
}
Помните, что этот код не работает с исключениями, работает только с наборами результатов, заполненными строками, и только с бобами, в которых есть поля String для заполнения. Как только вы начинаете пытаться писать более сложный код, чтобы иметь дело с более сложными типами и отражениями ... вы заново изобретаете ORM. Постарайся не делать этого.