Gerar código automaticamente

16 respostas
Daianne

Tenho um formulário de cadastro, gostaria que quando fosse executado, o código aparecesse automaticamente no jtextfield, por exemplo, se fosse cadastrar o primeiro aluno, automaticamente o código 1, já estaria no jtextfield
e o usuário iria preencher apenas os outros campos, alguém poderia me ajudar?
obrigada.

16 Respostas

fantomas

Oi Daianne,

Fala mais sobre o tema:

  1. Envolve banco de dados? Se envolve, qual é o banco?

  2. Quantos usuários irão utilizar esta tela?

  3. Os códigos precisam seguir uma sequencia sem intervalos? Ex. 1,2,3,4,5.

  4. E se o usuário desistir do cadastro, o que deverá acontecer com o código? Fica disponível ou poderá ser ignorado pra sempre?

flws

doug

Olá
Na hora que vc for construir sua tela, vc faz uma pesquisa no BD, fazendo o max do campo que vc quer… por exemplo

// Sua classe que monta a tela  

       //Sua classe que chama o banco de dados
      Integer numSeq = new ClasseBD().getNumeroSequencial();

   JTextField jtf = new JTextField(numSeq.toString());
   add(jtf);

   // E Assim por diante

Obs.: Mas creio que esse sistema seja um sistema que várias pessoas vão conectar ao mesmo tempo, dai isso pode ter complicações, trazer esse número preenchido.

Espero ter ajudado
Flwsss

Daianne

como seria esse getNumeroSequencial();

doug

É mais ou menos assim:

Query q = getSession().createQuery("select max(a.numero) from " + Pessoa.class.getName() + " as a where a.parceiro.pkParceiro = :pkParceiro");		q.setParameter("pkParceiro", pkParceiro);

Integer sequencial = (Integer) q.uniqueResult();
return (sequencial == null ? 1 : sequencial.intValue() + 1);

Obs:. Aqui estou usando o hibernate, caso vc esteje usando o JDBC. Seu select muda um pouco… mas a estrutura é essa

Daianne

Não consegui
Deu erro

doug

Vc esta fazendo como?..
Poste seu código para que possamos analisar

Daianne

Criei este metodo para buscar o funcionario pelo codigo, posso utiliza-lo, para exibir tambem o codigo do funcionario no jtextfiel ?

public Funcionario buscar(int codigo) throws SQLException {
        Statement smt = conexao.pegarConexao().createStatement();
        String sql = "SELECT * FROM funcionario a WHERE a.codigo = " + codigo + ";";
        ResultSet rsFuncionario = smt.executeQuery(sql);
        if (rsFuncionario.next()) {
            Funcionario funcionario = new Funcionario();
            funcionario.setCodigo(rsFuncionario.getInt("codigo"));
            return funcionario;
        }
        return null;
    }
doug

Hum… acho que vc deveria utilizar um metod mais, especifico somente para retornar o numero… , no caso “getNumeroSequencial();”
Esse está trazendo sempre um funcionário determinado “Funcionario buscar(int codigo)”…
Seria mais ou menos isso que vc precisava:

public Integer getNumeroSequencial() throws SQLException {  
           Statement smt = conexao.pegarConexao().createStatement();  
           String sql = "SELECT max(f.codigo) FROM funcionario as f ";  
           ResultSet rsFuncionario = smt.executeQuery(sql);  
           if (rsFuncionario.next()) {  
               return rsFuncionario.getInt("codigo") + 1;  
           }  
          return 1;  
      }

Não testei , mas acho que isso funciona…
Dai na sua classe onde vc monta a tela… por exemplo JPanel ou JFrame… dai vc faz isso

//Chama Acesso ao banco de dados
int seq = FuncionarioBD().getNumeroSequencial();

// Coloca o dado na hora de montar a tela
JTextField jtf = new JTextField(seq);

//Adiciona componente na tela
add(jtf);

//Aqui já vai estar o numero printado

Espero ter ajudado
Flws

Daianne

olha criei minha tela no netbeans, ja inseri todos os componentes, então esse acesso ao banco tem q ficar dentro do metode actionperformed do jtextfield?

doug

Não…
Dentro do initComponent… não sei se no netbeans tem como fazer isso… mas
um evento que ocorra junto com o load da tela…

Daianne

Mas da esse erro
java.sql.SQLException: Column ‘codigo’ not found.

doug

Quer dizer que esse campo nao existe na sua tabela.
Verifica certinho o nome dele… pq o que coloquei foi apenas um exemplo…

Daianne

mas o nome e aquele

doug

Eita… estranho!!
Tenta debugar qual ponto está ocorrendo isso… talvez ajude

fantomas

Daianne,

Informe no post a stack trace completa da exception mais o código para que a gente passa ver em que linha está ocorrendo o erro.

flws

B

Eu recomendo não gerar códigos sequenciais antes que eles sejam gravados, nem mesmo fazer uma aplicação que dependa completamente da ordem e integridade de uma sequencia, ou mesmo reusar números velhos.

A partir do momento que começa a ter muita gente usando o programa, concorrendo um com o outro, tentar manter isso para funcionar como um relógio suiço é um pesadelo.

Criado 6 de julho de 2009
Ultima resposta 6 de jul. de 2009
Respostas 16
Participantes 4