Estou tentando fazer um metodo gravar generico, o q o metodo faiz:
nos paramentros eu mando:
1-uma string com a sql de insercao: “SELECT * FROM fn_inserirCidade(?,?)”
2-o objeto povoado da classe Cidade(como exemplo)
dentro do meu metodo eu pego o tpo da classe, pego os atributos da classe no caso os atributos da classe tem o mesmo nome do campo no banco, Cd_nome, Cd_uf, faco um for e no for eu pegaria o campo, o tipo do campo e executaria o get do campo:
O que eu consigo fazer: pegar o campo, o tipo dele e consigo pegar os metodos;
O que eu não consigo fazer: um if para ver se é do tipo int, boolean, double, só funciona pra String. E não sei como executar o metodo get do respectivo campo.
meu metodo até agora:
public int gravar(String sql,Object obj){
Connection conexao = null;
PreparedStatement state = null;
ResultSet rs = null;
try{
String str = new String();
Integer integer = new Integer(0);
boolean boo = true;
double doub = 0;
Class cls = obj.getClass();
Field[] campos = cls.getDeclaredFields();
conexao = this.getConexao();
state = conexao.prepareStatement(sql);
int numCampos = campos.length;
for(int i=0;i<numCampos;i++){
Class classeCampo;
Field campo = campos[i];
classeCampo = campo.getType();
if(classeCampo.isInstance(str)){
state.setString(i,/*Executa o metodo get do campo*/);
}else{
if(classeCampo.isInstance(new Integer(1))){
state.setInt(i,/*Executa o metodo get do campo*/);
}else{
if(classeCampo.isInstance(boo)){
state.setBoolean(i,/*Executa o metodo get do campo*/);
}else{
if(classeCampo.isInstance(doub)){
state.setDouble(i,/*Executa o metodo get do campo*/);
}
}
}
}
}
}catch(Throwable e){
if(e instanceof org.postgresql.util.PSQLException){
JOptionPane.showMessageDialog(null,e.getMessage());
retorno = false;
}else{
e.printStackTrace();
retorno = false;
}
}finally{
try{
if (conexao != null)
conexao.close();
if(state != null)
state.close();
}catch(Throwable e){
e.printStackTrace();
retorno = false;
}
return retorno;
}
return 1;
}
Nota: só o primeiro if funciona
se alguem puder me ajudar eu agradeco.
>