Gerador de código para JTabel

4 respostas
D

Olá eu sou novo no forum e não sei se já tem aqui no forúm algum gerador de código, mais eu vou mandar o meu código, para ver se vocês gostam.

ResultSet rs;
public void geraCod(){
	rs = cnx.consulte("SELECT codcliente, nome, telefone, endereco, rg, cpf, obs from cliente order by codcliente;");
	try{
		int id;
		rs.last();
		id = rs.getInt(1);
		id = id + 1; 
		fldCodigo.setText("" + id + "");
	}catch (SQLException sqle){
		String mensagem = "Erro: " + sqle.getErrorCode() + " " + sqle.getMessage();
		JOptionPane.showMessageDialog(null,mensagem ,"Erro",0);
	}
}

Daí é só adicionar o geraCod() em algum lugar.
Espero ter ajudado alguém.

4 Respostas

renzonuccitelli

Cara, pouco mexi com JDBC, mas sem que tem uma opção que vc manda ele salvar e ele retorna o código pra vc. Se estivesse usando Hibernate ou JPA eu poderia te ajudar. Essa tua solução tem vários problemas:

  1. pra que selecionar vários campos da tabela se vc só precisa do código
  2. no SQL vc poderia tem a opção de só pegar um resultado, aquele que tiver ID máximo.
  3. E se várias Threads acessarem, isso vai fazer com que dois elementos possuam mesmo ID.
  4. É só sua aplicação Java que vai acessar o BD? pq se nao for, pode ter ocorrer o mesmo problema descrito no problema anterior

Vc já tentou ver se o método que vc usa pra salvar não retorna um Object? pq se retornar, ele retornará sua chave, aí vc pode colocar no BD o ID como autoincrement ou algum tipo de gerador do próprio BD.

jurunaloco
public int ProxID(String Campo, String Tabela, String Condicao) {
        int PID = 0;
        try {
  
            stmt = conexao.createStatement();
            res = stmt.executeQuery("SELECT MAX(" + Campo + ") as ID FROM " + Tabela + " " + Condicao);
            if (res.next()) {
                PID = res.getInt(1);
            }
        } catch (SQLException e) {
            System.err.println("Erro: " + e);
        }
        return PID + 1;
    }

exemplo: ProxID(“codigo_cidade”, “cidade”, “”) a condicao é para filtrar… exemplo: where UF = ‘SC’ , se deixar em branco é ignorado

sim… eu ainda uso JDBC :slight_smile:

D
respondendo aos seus problemas

1 - Selecionei vários campos porque eu puxei o código de outro lugar que pegava todos os campos  <img src="//https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngtuck_out_tongue.png?v=5" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:"> , alterei depois, mas n editei aqui  ;

2 - Teria essa opção mais n consegui e utilizei o POG (Programação Orientada a Gambiarra);

3 - Não tem como vários threads acessarem, é apenas para um;

4 - Sim, é somente 1 pessoa que vai comandar, caso outras aplicações fossem utilizá-lo, seria apenas para busca, e não para inserção de dados novos;

Melhor dizendo, para aplicações tipo a minha, foi uma solução que eu consegui encontrar, além do que eu sou ainda programador amador :oops:, mais o código do juruna é melhor do que o meu :smiley: , mas mesmo assim, continuo com o meu, só pelo duro esforço que eu tive.

renzonuccitelli

Opa, o código nao foi meu nao…rs. Mas então, quando comecei, também fui logo fazendo um projeto pra facu, usando JDBC na raça. Aí perguntei pra um amigo que manjava mais, ele me indicou o Hibernate, pois ficar mexendo com JDBC puro é fogo, pelo menos eu acho muito chato. Só coloquei os problemas que encontrei para te alertar, se vc já sabia, entao melhor ainda.
Já quanto a acesso só por uma Thread, toma cuidado. Se tiver trabalhando com componentes visuais, como frames, não esqueça que cada um possui sua própria Thread furar sua suposição de acesso somente por uma Thread. Enfim, retornando um ResultSet muito grande também pode te dar problema de estouro de memória. Mas usa essa solução sim, ainda mais se o BD nao for grande.

[]'s

Criado 22 de janeiro de 2009
Ultima resposta 23 de jan. de 2009
Respostas 4
Participantes 3