Я наткнулся на эту страницу, потому что странно, я не могу установить поле открытых строк в своем классе. Код добавит новую строку в ArrayList в каждый цикл for. Проблема в том, что я помещаю код создания экземпляра нового объекта (используя отражение) только один раз, вне внутреннего for.
private ArrayList processDataSetResultSetAsArrayList(ResultSet resultSet, String fqnModel) {
ArrayList result = new ArrayList();
try {
ResultSetMetaData metaData;
int nColoumn;
String columnName;
String fieldValue;
Field field;
Object modelInstance;
metaData = resultSet.getMetaData();
nColoumn = metaData.getColumnCount();
resultSet.beforeFirst();
Class modelClass = Class.forName(fqnModel);
while (resultSet.next()) {
modelInstance = modelClass.newInstance();
for (int i = 1; i <= nColoumn; i++) {
columnName = metaData.getColumnName(i);
field = modelInstance.getClass().getDeclaredField(columnName);
fieldValue = resultSet.getString(i);
field.set(modelInstance, fieldValue);
}
result.add(modelInstance);
}
} catch (Exception ex) {
Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
}
return result;
}
Убедитесь, что теперь я перемещаю Class.forName (fqnModel) вне цикла while. Потому что, конечно, нам нужно создать объект Class только один раз. Но затем, перед каждым циклом for, я создаю объект модели, который в конечном итоге будет добавлен в ArrayList.
Чтобы было ясно, это мой класс BiroModel выглядит так:
public class BiroModel extends Model {
public String idbiro = "";
public String biro = "";
public BiroModel() {
}
public BiroModel(String table, String pkField) {
super(table, pkField);
fqn = BiroModel.class.getName();
}
public String getBiro() {
return biro;
}
public void setBiro(String biro) {
this.biro = biro;
}
public String getIdbiro() {
return idbiro;
}
public void setIdbiro(String idbiro) {
this.idbiro = idbiro;
}
}
Я создаю здесь соглашение о том, что весь объект поля должен быть объявлен открытым. Но, поскольку мне нужен синтаксис EL, мне все еще нужно создать getter / setter для этого открытого поля.