I've seached for a solution but what I found was using Hybernate, but i'm trying to do it myself, because i can't use hybernate on class yet.
I try to set the int value I get from ResultSet by using
Field.set(Object value, Object obj)
but it doesn't seem to be working, here's my code:
public class GenericDao<T> {
public static void main(String[] args) {
//Create instance of GenericDao
GenericDao<Produtos> dao = new GenericDao<>();
//select Products (Produtos) from Database
ArrayList<Produtos> produtos = dao.select(Produtos.class, "");
//Print all product names
for (Produtos produto : produtos) {
System.out.println(produto.getNomeProduto());
}
}
//Insert creator method
public int insert(Object obj) {
//Insert is working properly
}
//Select creation method
public ArrayList<T> select(Class<T> c, String whereStatement) {
//Select statement creation, I know that the String whereStatement
//is terrible here, i just need to get it working and i'll change it later
String sql = "SELECT * FROM " + c.getSimpleName() + whereStatement;
//getting connection
Connection conexao = new ConnectionFactory("FastFood").obterConexao();
//Creating ArrayList to return
ArrayList<T> list = new ArrayList<T>();
try {
Statement pstmt = conexao.createStatement();
ResultSet rs = pstmt.executeQuery(sql);
while (rs.next()) {
for (Field f : c.getDeclaredFields()) {
T obje = c.newInstance();
boolean wasAccesible = f.isAccessible();
if (!wasAccesible) {
f.setAccessible(true);
}
String type = f.getType().getSimpleName();
if (type.equalsIgnoreCase("String")) {
f.set(rs.getString(f.getName()), obje);
} else if (type.equalsIgnoreCase("int")) {
int value = rs.getInt(f.getName());
f.set(value, obje); //THE ERROR IS HAPPENING HERE, you can ignore the rest if you want to
} else if (type.equalsIgnoreCase("localdatetime")) {
f.set(LocalDateTimeConverter.DateToLocalDateTime(rs.getDate(f.getName())), obje);
} else if (type.equalsIgnoreCase("double")) {
f.set(rs.getDouble(f.getName()), obje);
} else if (type.equalsIgnoreCase("boolean")) {
f.set(rs.getBoolean(f.getName()), obje);
}
if (!wasAccesible) {
f.setAccessible(false);
}
list.add(obje);
}
}
} catch (Exception e) {
System.err.println("Erro : " + e.getMessage());
}
return list;
}
The error I'm getting is: Can not set int field br.com.gtff.bean.Produtos.idProduto to java.lang.Integer
Here is what being used from the Produtos Class
public class Produtos {
private int idProduto;
private String nomeProduto;
private Double valorProduto;
private int gramasProduto;
private Boolean ativo;
}
Aucun commentaire:
Enregistrer un commentaire