Dados do banco pro java

Olá pessoal, sou novo aqui, então ainda estou me adaptando ao funfar do fórum…
Gente é o seguinte, sou begginer no java legal, mas preciso, saber todo um grande “básico” pra resolver meu problema…
Eu preciso guardar na app, um dado vindo de um campo do banco de dados, um id que é um integer auto_increment(mysql) e não estou conseguindo receber e /ou tratar ele.

Abaixo o codigo do metodo na classe banco.java (o D.A.O.)

public int CapturaIDCliente(String CPF) throws Exception {

    String sql = "select id_cliente from cliente where cpf ='"+CPF+"'";
    preparador = con.prepareStatement(sql);
    rs = preparador.executeQuery();

    int Id;
    Id = Integer.parseInt(sql);
    return Id;

}

Esse trecho de código é na interface, pra cadastrar os id’s capturados em outra tabela que eu quero que
entre:

else
{

            Banco bd = new Banco();
            if (bd.verificarExistenciaCnpjEmpresa(e.getCNPJ())) 
            {
                int a = 0;
                int b = 0;
                bd.incluirEmpresa(e);
                a = bd.CapturaIDCliente(txtCpfClienteEmpresa.getText());
                b = bd.CapturaIDEmpresa(txtCNPJ.getText());

                bd.CadastraRelacaoEmpresaCliente(a, b);

                JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso", "Cadastro efetuado", JOptionPane.INFORMATION_MESSAGE);
            } else 
                {
                    JOptionPane.showMessageDialog(null, "Este CNPJ já foi cadastrado", "CNPJ existente", JOptionPane.WARNING_MESSAGE);
                }

        }

Aí eu não consigo fazer o id chegar na outra tabela por que ele não vem como deve vir.

Forçando a barra e passando um numero diretamente, entra na tabela com o metodo CadastraRelacao

Por isso sei que problema ta na query de consulta ao id, to boiando em alguma coisa ali. E ja fazem 5 dias. (BUAAAAA )

Me ajudem aí.

no método CapturaIDCliente, você deve substituir essa linha:

Id = Integer.parseInt(sql);

por isso:

while(rs.next()){
    id = rs.getInt("id_cliente");
}

Aproveite que você está usando PreparedStatements e não faça mais isso…

String sql = "select id_cliente from cliente where cpf ='"+CPF+"'";

Faça isso…

String sql = "select id_cliente from cliente where cpf = ?";
preparador = con.prepareStatement(sql);
preparador.setString(1, CPF);
rs = preparador.executeQuery();
...

Isso evita ataques de SQL injection, melhora a leitura do código e facilita a manutenção, imagina você tendo 10 campos na sua sql para comparar e isso não é impossível, seria sofrível você concatenar cada valor com a String, além de ficar “poluído” visualmente…

2 curtidas

Obrigado, fiz isso tambem