Metodo Insert Generico com PreparedStatement

Obs: O nome da tabela do banco tem q ser em minusculo, e o mesmo da classe. Ficou com um pouco de Gamb mas funciona!!!

############## Metodo Insert ################

public void insert(T a) {
StringBuffer sb = new StringBuffer();

    try {
        Field[] f = a.getClass().getDeclaredFields();
        sb.append("insert into ");
        sb.append(a.getClass().getName().substring(a.getClass().getName().lastIndexOf(".") + 1).toLowerCase() + " ");
        sb.append("values");
        sb.append("(");
        String interroga = "?";
        for (int j = 0; j < f.length; j++) {
            sb.append(interroga);
            if(j < f.length-1)
                sb.append(",");
        }
        sb.append(")");

        System.out.println(sb.toString());

        ps = Conect.conect().prepareStatement(sb.toString());

        //Posicao iniciada com 1 referente a 1ª coluna da tabela
        int pos = 1;
        for (int i = 0; i < f.length; i++) {
            try {
                //ativa o acesso aos dados de atributos Private
                f[i].setAccessible(true);
                ps.setObject(pos, f[i].get(a));
                pos++;
            } catch (IllegalArgumentException ex) {
                Logger.getLogger(Conect.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Conect.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        ps.execute();
   
    } catch (SQLException ex) {
        Logger.getLogger(Conect.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        try {
            ps.close();
        } catch (SQLException ex) {
            Logger.getLogger(Conect.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            Conect.conect().close();
        } catch (SQLException ex) {
            Logger.getLogger(Conect.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Espero ter contribuido!!!
um abç a todos!!!

Coloca com a tag Code! Do jeito que está fica meio estranho bater olho e descobrir como faz sem testar.
Funciona, independente da estrutura da tabela?
Olha lá hein, vou testar! rs (brincadeira)
Flw e vlw!

eu fiz assim espero q ajude tmb

        //cria a variável representativa do comando sql a ser executado
            //(sqlInserir), obtem os campos do bean passado por parametro,
            //obtem o nome do bean, que deve ser igual ao nome da tabela no
            //banco, insere a 1ª parte do conteúdo na variável sqlInserir.
            String sqlInserir = "";
            Class classe = bean.getClass();
            Field campos[] = classe.getDeclaredFields();
            String tabela = pegaNome(classe.getName());
            sqlInserir = "insert into " + tabela + " (";
            //adiciona na string sqlInserir os campos seguidos de uma virgula,
            //e no ultimo fecha o parenteses dos campos e abre o parenteses dos
            //valores dos campos.
            for (int i = 0; i < campos.length; i++) {
                if (i != campos.length - 1) {
                    sqlInserir = sqlInserir + campos[i].getName() + ", ";
                } else {
                    sqlInserir = sqlInserir + campos[i].getName() + ") values (";
                }
            }
            //adiciona os valores dos campos a serem gravados no banco,
            //juntamente com as devidas aspas simples (caso seja necessário) e
            //virgula para separação dos valores através do método verificaValor()
            //e parenteses para fechar a parte do comando referente aos valores.
            for (int i = 0; i < campos.length; i++) {
                Field atributo = campos[i];
                atributo.setAccessible(true);
                if (i != campos.length - 1) {
                    sqlInserir = sqlInserir + verificaValor(atributo, bean) + ",";
                } else {
                    sqlInserir = sqlInserir + verificaValor(atributo, bean) + ")";
                }
            }
            //Cria uma conexao com o banco, prepara a sentença SQL, executa,
            //faz o commit dos dados, retorna true ou false(caso algum erro
            //tenha ocorrido durante a execução das linhas abaixo).
            PreparedStatement comandoSQL = Conexao.getInstance().prepareStatement(sqlInserir);
            comandoSQL.execute();
            if (!Conexao.getInstance().getAutoCommit()) {
                Conexao.getInstance().commit();
            }
            return true;
        } catch (SQLException ex) {
            //this.ex = ex;
            //new ConexaoException(ex.getClass().getName(), "Entre em contato com suporte", ex.getMessage(), ex.getStackTrace());
            //ex.printStackTrace();
            this.ex = ex;
        } catch (IllegalArgumentException ex) {
            //ex.printStackTrace();
            //new ConexaoException(ex.getClass().getName(), "Entre em contato com suporte", ex.getMessage(), ex.getStackTrace());
            this.ex = ex;
        }
        return false;
    }
    private String pegaNome(String pacoteClasse) {
        //Recebe uma String contendo o pacote + ponto + nome do classe,
        //Exemplo (beans.CLIENTES), procura o ponto na String, coloca o
        //conteúdo da String a partir do ponto na variável soClasse, e a
        //retorna, contendo somente o nome da classe.
        String soClasse = "";
        char ponto = '.';
        if (pacoteClasse != "") {
            for (int i = 0; i < pacoteClasse.length(); i++) {
                if(pacoteClasse.charAt(i) != ponto){
                    soClasse += String.valueOf(pacoteClasse.charAt(i));
                }else{
                    soClasse = "";
                }
            }
            if (soClasse != ""){
                return soClasse;
            }
        }
        return pacoteClasse;
    }
  
  
    private String verificaValor(Field atributo, Object bean) {
        //Recebe o atributo da vez e um objeto contendo o bean que contém os
        //valores a serem gravados no banco, então verifica o tipo do atributo
        //para montar a string de maneira correta.
        String valor = "";
        try {
            if (atributo.getType().getName().equals("java.lang.String"))  {
                valor = "'" + atributo.get(bean) + "'";
                if (valor.equals("'null'")) {
                    valor = "NULL";
                }
            } else {
                if (atributo.getType().getName().equals("java.lang.Float"))  {
                    valor = String.valueOf(atributo.get(bean));
                } else {
                    if (atributo.getType().getName().equals("java.lang.Double")) {
                        valor = String.valueOf(atributo.get(bean));
                    } else {
                        if (atributo.getType().getName().equals("int")) {
                            valor = String.valueOf(atributo.get(bean));
                        } else {
                            if (atributo.getType().getName().equals("java.math.BigDecimal")) {
                                valor = String.valueOf(atributo.get(bean));
                            } else {
                                if (atributo.getType().getName().equals("java.sql.Timestamp")) {
                                    valor = "'" + String.valueOf(atributo.get(bean)) + "'";
                                    if (valor.equals("'null'")) {
                                        valor = "NULL";
                                    }
                                } else {
                                    if (atributo.getType().getName().equals("boolean")) {
                                        valor = String.valueOf(atributo.get(bean));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return valor;
        } catch (IllegalArgumentException ex) {
            //ex.printStackTrace();
            //new ConexaoException(ex.getClass().getName(), "Entre em contato com suporte", ex.getMessage(), ex.getStackTrace());
        } catch (IllegalAccessException ex) {
            //ex.printStackTrace();
            //new ConexaoException(ex.getClass().getName(), "Entre em contato com suporte", ex.getMessage(), ex.getStackTrace());
        }
        return null;
    }
    
    public Exception getException() {
        return this.ex;
    }
    
}

T+

Ficou show Robson!!! Vlw msm.

Onde vc fecha as conexoes com bd?

atraves da minha classe conexao…

Como seria a chamada do método inserir passando a tabela e campos?