GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Zero a esquerda

Olá a todos,
Eu sei que este é um assunto já bem debatido neste fórum, mas estou precisando de ajuda para colocar zeros a esquerda em um campo auto numérico em java. Até vem os zeros que programo, mas o numero sequencial é sempre do último registro.
Cadastrei 8 registros e a saída para todos é sempre este “000008”. Peço a gentileza de me ajudarem com este código, onde estou errando:

 private void zero() {
     
     String c = "Select idhist from tbhistorico where idhist like ?";
     int n;
     int p;
     try {
         pst = cot.prepareStatement(c);
     } catch (SQLException ex) {
         Logger.getLogger(TelaHistoricoOS.class.getName()).log(Level.SEVERE, null, ex);
     }
     try {
         pst.setString(1, "%");
     } catch (SQLException ex) {
         Logger.getLogger(TelaHistoricoOS.class.getName()).log(Level.SEVERE, null, ex);
     }
     try {
         rs = pst.executeQuery();
     } catch (SQLException ex) {
         Logger.getLogger(TelaHistoricoOS.class.getName()).log(Level.SEVERE, null, ex);
     }
try {
    while (rs.next())
    {
        n = rs.getInt(1);
        p = n + 000000;
        
        txtID.setText(String.format("%06d", (p)));
        
    }
} catch (SQLException ex) {
    Logger.getLogger(TelaHistoricoOS.class.getName()).log(Level.SEVERE, null, ex);
}
}

Agradeço toda a ajuda!

Cada iteração do while sobrescreve o valor anterior de p com o novo valor retornado pelo ResultSet, logo, no fim, quando rs.next() retornar false, o valor de p será igual ao último valor retornado pelo ResultSet. Resta saber o que você quer fazer, já que está preenchendo um JTextField (provavelmente), e não uma JTable, por exemplo, que é o componente pais acertado para exibir mais de uma valor por vez. Se tu quiser obter apenas o primeiro ID, basta usar o desvio incondicional break para parar while. Se tu quiser obter todos os IDs retornados pelo ResultSet, tu deve preencher um array ou List/ArrayList e não uma variável (que armazena um único valor por vez) Se quiseres apenas exibir os IDs (para fim de teste, por exemplo), basta usar um System.out.println(p) no lugar se preencher um JTextField.
Pergunta-se, o que tu pretende fazer exatamente?

Somar sua variável com zero não serve pra nada.

Sim, já fiz sem esta soma, mas não altera indicar a variável “n” diretamente, e somando mais ou menos 1, não surte o resultado que desejo.

Ok, vou lhe explicar o que preciso, eu tenho uma JTable que busca todos os dados do cliente em uma tabela, selecionando qualquer dos registros abre um formulário cadastro de produtos com os mesmos registros do cliente para ser acrescidos dados de produtos. É exatamente este formulário cadastro de produtos no campo ID que quero acrescentar zeros do registro 000001 ao registro 999999. Porem usando o while.next todos os registro selecionados aparecem como o último registro cadastrado e se eu usar o desvio “break” retorna sempre o primeiro registro cadastrado. Eu preciso que venha o registro do cliente, se cadastrado no banco como registro 000002 venha como 000002, entendeu? Agradeço se puder me ajudar. Vlw!

Coloquei uma jTextField só para comparação, o registro real seria o 7, no formulário aparece sempre o último registro cadastrado, neste caso ate aqui o 8, com os zeros a esquerda.

Então, você deve armazenar esses valores em uma lista (List/ArrayList):

private List<String> codigos = new ArrayList<>();
[...]
while (rs.next()){
	n = rs.getInt(1);
	p = n + 000000;
	
	codigos.add(String.format("%06d", (p)));
}

Você entendeu que tu está o valor está sendo sobrescrito? Ou seja, quando na primeira iteração, p = 1; na segunda p = 2, na enésima p = n. Logo, será mostrado n. Logo, na tela tu pode fazer:

txtID.setText(codigos.get(i));

Se i = 0. então, txtID vai receber 00001.

Você pode avançar uma posição da lista sempre que tu abrir uma ordem de serviço nova, por exemplo.

Opa, obrigado pelo esclarecimento, vou tentar fazer as mudanças e retorno aqui para falar dos resultados. Vlw!

Sem solução, eu até consegui gerar uma sequencia com zeros na tabela, mas não consigo no formulário de cadastro, Seguem as tentativas, se tiverem mais alguma solução, eu aceito sugestões!