Recuperar ID do banco, ao clicar em uma linha de uma JTable que não mostra essa ID[RESOLVIDO]

Olá, preciso de uma ajuda…

como faço pra pegar a id do db ao clicar na linha da jtable, sendo que a jtable só mostra 2 colunas “Observações”,“Sel”, a id não é mostrada.

parte do código

[code] dados = new ArrayList();
while (obj_conexao.resultset.next()) {
observacao = obj_conexao.resultset.getString(“dados”);
sel = obj_conexao.resultset.getBoolean(“sel”);
id = obj_conexao.resultset.getString(“id_od”);
dados.add(new Object[]{observacao,sel,id}); //aqui pego a id.
}

            boolean[] edicao = {false, true};
            Object[][] obj = new Object[][]{{"",Boolean.class}};
            String[] colunas = new String []{"Descrição","Sel"}; // aki nao mostro a coluna ID.
            TableModel mode = new modelos.TableModel(dados, colunas, edicao) {
                Class[] types = new Class [] {java.lang.String.class,Boolean.class};
                @Override
                public Class<?> getColumnClass(int column) {return types[column];}
            };[/code]

agora como faço para pegar essa id ao clicar na linha da jtable?

valeu pessoal!

Boa tarde Zick23.

Simples. O JTable tem o método getSelectedRow() que retorna a linha do seu JTable, e se o ID do seu TableModel é a última coluna, logo:


    TableModel mode = meuJTable.getModel()
    Integer id = (Integer)mode.getValueAt(meuJTable.getSelectedRow(), 2);

cara não acredito que era tão simples… funcionou blz!!!

mto obrigado cara!!!

TableModel mode = meuJTable.getModel() String id = (String)mode.getValueAt(meuJTable.getSelectedRow(), 2);

só troquei o Integer por String, e deu certo!!

valeu!!!

Olá

De nada.

Só não esqueça de colocar [Resolvido] no título do seu post.

Abraço.

Olá,

pelo que eu entendi voce deve armazenar o id em um ArrayList separado e casar o indice do arraylist com as linhas da jtable.

mas e se eu tiver ordenação por coluna ativada ?

ao dar um getSelectedRow() na jtable os indices poderão nao estar mais na ordenação original com isso os indices do arrayList estarao errados.

há alguma solução ?

Boa tarde a todos.

[quote=Uaka]Olá,

pelo que eu entendi voce deve armazenar o id em um ArrayList separado e casar o indice do arraylist com as linhas da jtable.

mas e se eu tiver ordenação por coluna ativada ?

ao dar um getSelectedRow() na jtable os indices poderão nao estar mais na ordenação original com isso os indices do arrayList estarao errados.

há alguma solução ?[/quote]

Uaka, voce está confundindo o valor inteiro que representa a linha que vem do JTable, com o valor que vem de uma célula do JTable cujo o campo é ID, e logo o valor da coluna é ID. vamos exemplificar melhor:

Ora, se a pergunta do nosso amigo era clicar numa linha do JTable para obter o ID da coluna que veio do banco, logo voce perceberá que não importa a ordem que voce fez no Select na tabela do banco, isto porque o ID do banco sempre vai se referir ao mesmo registro e ele não muda, mesmo que não esteja em sincronia com a ordem de linhas do JTable. Se não, veja o exemplo.

Voce vai reparar que quando voce clica na linha 4 (quatro) do JTable na primeira imagem, vai retornar o ID = 1 e nome = Uaka, já na segunda imagem com uma ordem diferente, se voce clicar na linha 3 (tres), o ID retornado será 1 com o mesmo nome Uaka, não é mesmo.

Logo voce perceberá que a linha do JTable, que o que importa e ID do banco está fazendo referência a registro do banco, e não a linha do JTable, o retorno da linha do JTable só é importante quando voce clica nela, isto porque, se voce quer pegar os dados de uma linha no JTable, voce tem que identificar primeiro a linha do JTable, para depois pegar os dados que se encontra nela, inclusive o ID do registro na tabla do banco de dados. Logo, a instrução abaixo:

TableModel mode = meuJTable.getModel()     
String id = (String)mode.getValueAt(meuJTable.getSelectedRow(), 2);

O que voce acha que vai retornar na String ID :?: :?: :?: A linha do JTable ou o ID que vem da tabela no Banco :?: :?: :?:

Assim sendo, se é o que interessa é o ID que vem da tabela no Banco de Dados, que ao se comparar com o ID que está no ArrayList, será o mesmo registro de acordo com o seu ID.

Então, acho que não me expressei corretamente:

eu tenho uma JTable que não exibe o ID do banco. por exemplo:

NOME: ENDERECO:
allan | rua x, nº y
joão | rua z nº t

Eu tenho um array Multidimensaional para essa essa Jtable assim: Object[][] obj = new Object[2][3] (duas linha como mostrado acima porem com tres colunas)

sendo que o ultimo registro é o ID ! porem como a JTable só tem 2 colunas ela exibe como mostrei acima, o nome e endereço.

Minha pergunta: como eu recupero o ID desse obj, apos selecionar uma linha na JTable?

eu poderia muito bem pegar linha corrente com getSelectedRow() e dái recuperar no Object o id, tipo assim: id = obj[table.getSelectedRow()][2];

porem… a minha JTable tem setAutoCreateRowSorter(true);
Ou seja, o cliente pode ordenar os resultados da JTable por nome crescente ou decrescente e daí joão pode ser a primeira linha apos ordenar pela Coluna! porem o ID da primeira linha no obj corresponde a allan.

Entendeu ? Se eu colocar uma coluna a mais na JTable, o ID aí sim… table.getSelectedRow() ou table.getValueAt(row, col).

Poderia sim armazenar os nomes em ArrayList e pegar o Index do ArrayList, porem se houver nomes iguais ??

Boa tarde Uaka.

Como disse antes, a linha de um JTable, só é interessante para voce identificar em qual linha voce está clicando, para que se possa pegar os valores que estão dentro do seu JTable, e não dentro da tabela, ou dentro de outro objeto de persistência de dados. Como o valor do seu ID não se encontra do seu JTable, então voce terá que fazer a pesquisa no seu array de Objects pelos campos nome ou endereco, pegando o valor através da célula linha, coluna do JTable, por exemplo:

  TableModel mode = meuJTable.getModel()       
  String nome = (String)mode.getValueAt(meuJTable.getSelectedRow(), 0);

Onde o segundo parâmetro com o valor zero (0), representa a primeira coluna do seu JTable, que deva ser o da campo Nome. Daí em diante voce terá que criar loops de pesquisa dentro do seu array bidimensional, o que eu acho não muito recomendável, eis que a persistência de dados de um JTable, voce pode muito bem fazer com uma classe que herde de AbstractTableModel, sem precisar criar esses arrays de persistência.

A propósito, se voce criou o array com tres colunas, incluindo o ID, por quê então voce também não criou esta coluna lá JTable e ocultou ela, já que não queria que ela aparecesse. :?: :?: :?: