Métodos e Polimorfismo

Bom dia galera,

Sou iniciante em programação java, venho a cada dia pesquisando um pouco mais. Já realizei alguns projetos na faculdade e agora estou trabalhando em um projeto onde irei implantar na empresa em que trabalho, é bem simples, porém estou enfrentando alguns problemas.

Tenho este método criado que serve para inserir dados no banco de dados mysql:

[code] public boolean insere(String revendedores, String nome)
{

boolean retorno = false;
try {
try (PreparedStatement stmt = (PreparedStatement) this.con.prepareStatement(“insert into " + revendedores +” (nome) values (’" + nome + “’);”)) {
stmt.execute();
}
retorno = true;
JOptionPane.showMessageDialog(null,“GRAVADO COM SUCESSO”);
} catch (SQLException ex) {
retorno = false;
System.err.println("Erro INSERT: " + ex);
}
return retorno;
}[/code]

Este método está funcionando perfeitamente. Porém irei realizar outros cadastros onde os dados serão cadastrados em outra tabela no meu banco de dodos. Este método esta gravando dados na tabela “revendedores” na coluna “nome”. Andei pesquisando um pouco e acredito que através do polimorfismo eu consigo utilizar o mesmo método para gravar outras informações em outra tabela, ja tente utilizar o método de sobrecarga mais a assinatura deve ser diferente da outra, inclusive nos tipos de variáveis, eu não consegui ter sucesso, se não teria que usar vários métodos gravar para os meus diversos tipos de cadastro.

Gostaria de saber se isso é mesmo possível e como faço para implementa-lo. Já vi alguns exemplos mais são muito simples e não utilizam conexões com banco de dados.

Abraço a todos.

eae Mano…

vê se eu entendi… vc quer usar o mesmo metodo para gravar dados em tabelas diferentes???

Nunca vi isso na vida… cara pq vc não usa o padrão…cria um metodo para cada ação…

[]s,

Então Marcelo,

Até entendi o padrão, mais é normal que seja assim? Ex. Método Gravar (Vai gravar na tabela revendedores e na coluna nome), Método gravar2 (Vai gravar em outra tabela e outra coluna) …

Seria isso mesmo?

dado5000

Você está com problema de entendimento em OO

Por exemplo, você está chamando o método que é responsável por realizar a inserção na base, mas passando informações que ele é quem deveria saber. O nome da tabela, ele já deveria saber. Só é necessário informar os valores.

Então você não deve criar uma classe com um método para cada tabela/objeto e sim uma classe e um método para cada tabela/objeto

Segue abaixo um exemplo com os pontos mais importantes para sua duvída.

Ex:

Classe que representa um Vendedor

public class RevendedorBean() {
    private String nome;
    private int idade;

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setIdade(String idade) {
        this.idade = idade;
    }

    public String getNome() {
        return this.nome;
    }

    public int getIdade() {
        return this.idade;
    }
}

Classe que realiza o acesso aos dados dos Revendedores em um Banco de Dados

public class RevendedorDAO() {

    public void insere(Revendedor revendedor) {
        PreparedStatement stmt = (PreparedStatement) this.con.prepareStatement("insert into revendedores (nome, idade) values (?,?);")) {  

        stmt.setString(1, revendedor.getNome());
        stmt.setInt(2, revendedor.getIdade());
        stmt.executeUpdate(); 
   }
}

Acontece que ele pode ter um método que apenas faça a inserção.
Basta que ele monte a query antes e passe-a como argumento, aí tanto faz, na realidade, o método pode fazer tudo…

drsmachado

Pode ser, não havia analisado dessa maneira.

Mas a simplicidade do código dele e o título do post, me induz à falta de conhecimento em java.

[quote=btafarelo]drsmachado

Pode ser, não havia analisado dessa maneira.

Mas a simplicidade do código dele e o título do post, me induz à falta de conhecimento em java.[/quote]
Quanto a isso, não há dúvidas, até mesmo pelo que ele quer fazer.
De qualquer forma, ele ainda vai aprender,
Agora, o que me dá medo não é um código desses ou mesmo o que ele deseja fazer, é ver que alguém o contratou, mesmo sem o menor conhecimento em programação,
Ou seja, está faltando profissionais no mercado.

É pra rir ou pra chorar?

btafarelo entendi o que vc fez, ficou bem mais organizado, mais do mesmo jeito o método insere que vc criou serve apenas para a class RevendedorBean(), é isso? Se eu tiver os outros dados para inserir vou precisar criar uma outra classe e um novo método? E o nome do método poderá ser o mesmo?

Atualmente chamo o método insere assim:

cx.insere("revendedores", tf_nome.getText()); 

At+

dado5000, utilize DAO genérico com JPA e Hibernate, pesquise sobre eles, você verá que vai ser muito mais simples.

drsmachado, desculpe se não sei programar Java, creio que vc não tenha nascido sabendo de tudo. Sou iniciante em java e estou a procura de aprender, estou no segundo ano da faculdade de ciência da computação e longe ainda de aprender Java. Procurei aqui na fórum alguém p me ajudar e o nosso amigo btafarelo está tentando me ajudar. Não entendo ainda muito os termos técnicos da linguagem e por isso tenho um pouco de dificuldade. Não trabalho na área e não fui contratado para programar, já trabalho aqui a 5 anos. Agora se falta profissionais no mercado é por que pessoas como vc ficam fechado para sí mesmos. Mais mesmo assim, obrigado pela ajuda, aos poucos vou pegar o jeito.

Abraços.

Isso

Se houver um PedidoBean é necessário um PedidoDAO

Agora, se quiser pode fazer um BaseDAO e todos os demais DAO farão o extends desse BaseDAO e implementarão seu prório insere

Ex:

Java 1.4

public abstract class BaseDAO {

    public abstract void insere(Bean bean);
}

public class RevendedorDAO extends BaseDAO {

   public void insere(Bean bean) {
     RevendedorBean revendedor = (RevendedorBean) bean;

     //código para inserção
   }

}

public class PedidoDAO extends BaseDAO {

   public void insere(Bean bean) {
     PedidoBean pedido = (PedidoBean) bean;

     //código para inserção
   }

}

Java >= 1.5

public abstract class BaseDAO<T> {

    public abstract void insere(T bean);
}

public class RevendedorDAO extends BaseDAO<RevendedorBean> {

   public void insere(RevendedoBean bean) {
     //código para inserção
   }
}

public class PedidoDAO extends BaseDAO<PedidoBean> {

   public void insere(PedidoBean bean) {
     //código para inserção
   }

}

Acho que isso esclarece suas dúvidas conteituais.

Apenas estou respondendo a dúvida de um iniciante, dentro do scopu da questão. Não acho que JPA/hibernate seria melhor pra ele nesse momento. Apesar de ser uma opção.

Errei o nome, kkk!!

Estudar JPA sem dominar o JDBC seria confuso (minha opinião!)

Esse ‘;’ vai dar pal, tire ele daí!

dado5000, estude bem OO, alem de torna-lo um programador mais habilidoso pode te inspirar a tirar algumas certificações.

Abs!

Estudar JPA sem dominar o JDBC seria confuso (minha opinião!)

Esse ‘;’ vai dar pal, tire ele daí!

dado5000, estude bem OO, alem de torna-lo um programador mais habilidoso pode te inspirar a tirar algumas certificações.

Abs! [/quote]

Não tenha dúvida, mas para o que ele está tentando fazer seria muito mais fácil aplicar com JPA/Hibernate, ele vai precisar usar Reflection pra conseguir fazer o que ele quer.

rafadelnero

O ; não vai dar pau não. Tem um erro mas não é esse

Tem que ter ; fora, no lugar da { errei ali no ctrl-c ctrl-v

Acho que não existe mais banco de dados que não aceita o ; no final das instruções. Claro que se for uma versão antiga pode ocorrer.

Concordo 100%

Pior que JDBC e ficar fazendo chamada de PROC dentro do java kkkkkkkkkk
DAO genérico com JPA e Hibernate é mil vezes mais produtivo!

Abs!

ops, escri besteira. removendo…

[quote=wellington.nogueira]A proposta dele é utilizar polimorfismo e, sinceramente, não notei nenhuma resposta nessas direção.

@dado5000 como você andou estudando polimorfismo, sugiro que tente fazer por esse caminho e coloque aqui o resultado para podermos avaliar se está no caminho correto.

Para usar polimorfismo, será necessário o uso de herança e/=ou interface que “generalizaria” alguns pontos e, através de sobrescrita, você poderia implementar pontos específicos.

A dica dada pelo btafarelo pode ajudar nesse caminho.

Tente e vá colocando aqui os resultados :wink:

[EDIT]demorei para responder… Já tem respostas relacionadas a polimorfismo[/EDIT][/quote]

Obrigado Wellington, estarei pesquisando mais e postarei aqui meus resultados … Obrigado.

Obrigado Wellington, estarei pesquisando e postando meus resultados.

Forte abraço.