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.
Gerar código automaticamente
16 Respostas
Oi Daianne,
Fala mais sobre o tema:
-
Envolve banco de dados? Se envolve, qual é o banco?
-
Quantos usuários irão utilizar esta tela?
-
Os códigos precisam seguir uma sequencia sem intervalos? Ex. 1,2,3,4,5.
-
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
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
como seria esse getNumeroSequencial();
É 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
Não consegui
Deu erro
Vc esta fazendo como?..
Poste seu código para que possamos analisar
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;
}
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
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?
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…
Mas da esse erro
java.sql.SQLException: Column ‘codigo’ not found.
Quer dizer que esse campo nao existe na sua tabela.
Verifica certinho o nome dele… pq o que coloquei foi apenas um exemplo…
mas o nome e aquele
Eita… estranho!!
Tenta debugar qual ponto está ocorrendo isso… talvez ajude
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
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.