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

Erro Ao Prencher Tabela Com uma GetSelectedRow


#1
Fala Pessoal Estou utilizando o seguinte codigo para preencher uma tabela a partir de um item selecionado, com um evento de mouse cliked, porem por vezes funciona e as vezes não.

Estou Utilizando o codigo:
    <private void jTablePesqMouseClicked(java.awt.event.MouseEvent evt) {                                        
            // TODO add your handling code here:
            String nome_admin = ""+jTablePesq.getValueAt(jTablePesq.getSelectedRow(),1);//pega a linha que esta selecionada na tabela,guarda na string nome cliente
             conex.conexao();//conecta como banco
            conex.executaSQL("select *from tabela_adm where nome_admin='"+nome_admin+"'");//String sql que seleciona no banco os dados na tabela cliente pelo atributo nome
            try {
                conex.rs.first();//Seelciona o primeiro elemento
                jTCod.setText(String.valueOf(conex.rs.getInt("id_admin")));//seta o valor no txfield id cliente do banco
                jT_Nome.setText(conex.rs.getString("nome_admin"));//seta o valor no txfield nome cliente do banco
                jT_Usuario.setText(conex.rs.getString("user_admin"));
                jP_Senha.setText(String.valueOf(conex.rs.getInt("senha_admin")));
                jTCod.setText(String.valueOf(conex.rs.getString("id_admin")));
                        } catch (SQLException ex) {
                Logger.getLogger(CadastroCliente.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(null,"Nao Foi Possivel Preencher a tabela com item selecionado!"+ ex);//imprime erro e o codigo de erro
            }
            conex.deconecta();//desconecta banco de dados
            jB_Editar.setEnabled(true);
            
           
            
        }>

#2

Erro Que Apresenta


Alguem Poderia me dar uma força?


#3

Sua tabela_adm usa como PK a coluna nome_admin ?

Se não for, existe a possibilidade de existir mais de um registro que possua o mesmo valor, o que resulta em uma lista de valores, aí seria o caso de utilizar o next.

Exemplo:

while (conex.rs.next()) {
    /*Recupera todos os valores retornados do banco*/
}

Caso contrário, se esta coluna for sua PK e não existir a possibilidade de existirem registros com o mesmo valor, você precisa isolar a recuperação dos dados do resultSet, pois neste caso não existem dados a serem recuperados.

Exemplo:

if (conex.rs.first()) {
    /*Recupera os valores recuperados*/
}

#4

Fala jonathan_medeiros Obrigado pela ajuda, entao minha Primary key e o id_admin, se eu recuperar os valores pelo id_admin, e recuperar com o conex.rs.netx funcionaria ?


#5

É para funcionar sim!
Se você recuperar pelo id, como ele é sua PK, logo ele é único para cada registro, desta forma você garante que só haverá o retorno de um registro no resultset após realizar a consulta.


#6

Top Demais!!Vlw!!
Bom Testei Aqui E Rodou Belezinha, Outro Probleminha que estou encontrando e quando pesquiso um registro em minusculo por exemplo ele nao me retorna nada e da erro ao preencher a tabela, pode ser problema com insensitive case?


#7

Eu particularmente gosto de salvar os dados sempre em maiúsculo, pra evitar esses probleminhas de case sensitive, mas dá pra contornar!

Aplica um Upper no select e no valor de comparação.

Exemplo:

“ SELECT * FROM TABELA WHERE UPPER(COLUNA) LIKE '” + suaString.toUpperCase() + “' ”


#8

Ai Ficaria Dessa Forma:
conex.executaSQL("SELECT * FROM tabela_adm WHERE nome_admin LIKE '%"+mod.getPesq().toUpperCase()+"%'");`
Assim ele me da erro de ResultSet pedindo o next denovo


#9

A linha sql que me passou seleciona na tabela maiusculo e minusculo ?sem diferenciação e isso ?


#10

Não Brother… Ele busca do banco não importa como está salvo lá e transforma em maiuscula.
Depois ele pega sua String não importa como venha e transforma em maiuscula.
Depois compara as duas.

TextField:

String textField = meuTextField.getText(); //retorna AbAcAtE

Banco:

String banco = "aBaCaTe";

Uso:

String teste1 = textField.toUpperCase(); //retorna ABACATE
String teste2 = banco.toUpperCase(); //retorna ABACATE

teste1 == teste2; //retorna true

A diferença desse exemplo e do que o amigo @Jonathan_Medeiros deu é que ele tá transformando em maiuscula lá no banco de dados mesmo.


#11

Você esqueceu de aplicar o UPPER na coluna da cláusula WHERE jovem, igual no exemplo que te dei.

E coloca essa validação abaixo no seu código, isso garante que ele só vai pegar os dados do resultSet se ele realmente estiver com dados retornados da consulta.

if (conex.rs.first()) {
    /*Recupera os valores recuperados*/
}

#12

Show De Bola Obrigado Aos Amigos Pela Ajuda, Funcionando Beleza!!