Transferir os dados de um ResultSet para String[][]
10 respostas
pro_websis
Boa tarde pessoal, bom preciso de ajuda para listar os dados em uma JTable
tipo criei uma função que faz uma busca e tem como retorno uma string,
para depois jogar os dados numa tabela, o problema é que eu não estou conseguindo retornar os dados do resultset num String que seria as linhas da tabela
É bem simples, você simplesmente declara a referência para a matriz de Strings, mas não cria ela efetivamente. O que você tem que fazer é chamar o operador new antes de começar a usar a matriz:
String[][]matriz=newString[10][5];//10 linhas e 5 colunas, por exemplo
rmendes08
Sugestão: coloque todo o código em um único bloco try-catch, seu código ficará mais simples de se ler.
pro_websis
Poxa mendes valeu mesmo pela ajuda deu certo mais soh tenho mais uma coisinha
// aqui como eu posso colocar a quantidade total de linhas de um resultset // no lugar do 80, pra matriz ser do tamanho das linhas que foram retornadas do banco?// pq do banco esta retornando 2 resultados ai fica um monte de linha em brancoString[][]dados=newString[80][4];
Poxa mendes valeu mesmo pela ajuda deu certo mais soh tenho mais uma coisinha
// aqui como eu posso colocar a quantidade total de linhas de um resultset // no lugar do 80, pra matriz ser do tamanho das linhas que foram retornadas do banco?// pq do banco esta retornando 2 resultados ai fica um monte de linha em brancoString[][]dados=newString[80][4];
Wise question grasschopper!
Sabia que você ia perguntar isso! Existe um pequeno problema nessa abordagem. A interface do ResultSet não fornece o número de linhas do resultado da consulta. No entanto, você poderia calcular esse número com um loop e contando o número de linhas. Após contar, você cria a matriz, chama ResultSet.first() e repete o laço, desta vez lendo os resultados. Particularmente, eu acho essa solução péssima.
A segunda abordagem, que é mais correta e mais simples, é usar um ArrayList para as linhas do result set. Assim::
Se você realmente precisa retornar estes dados como uma matriz, basta chamar o métod toArray:
listaDeArray.toArray();
pro_websis
Então brother pelo menos no codigo o arrayList não tah indicando erro algum mais ainda tah dando um erro q não sei o q é
essa é a função que retorna a matriz
publicString[][]buscaAll(Stringquery)throwsSQLException{command=connection.createStatement();try{rs=command.executeQuery(query);}catch(SQLExceptionsqlex){System.out.println("erro sql ");sqlex.printStackTrace();}System.out.println("tamanho do array: "+rs.getRow());List<String[]>listaDeArray=newArrayList<String[]>();while(rs.next()){try{listaDeArray.add(newString[]{rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4)});}catch(SQLExceptionsqlex){sqlex.printStackTrace();}}command.close();return(String[][])listaDeArray.toArray();}
e aqui esta a chamada para o método
String[][]dados=null;Stringquery="select * from cadastro;";System.out.println(query);Bancob=newBanco("sis1");try{dados=b.buscaAll(query);}catch(SQLExceptionex){Logger.getLogger(ConsultaCliente.class.getName()).log(Level.SEVERE,null,ex);}String[]colunas=newString[]{"Nome","Endereço","Telefone","Email"};//Manipulando o modelo da Tabela finalDefaultTableModelmodelo=newDefaultTableModel(dados,colunas);tabelaCliente.setModel(modelo);
esse é o erro Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [[Ljava.lang.String;
rmendes08
Me desculpe amigo, o final do post ficou errado. Você precisa usar uma versão sobrecarregada do método toArray():
lista.toArray(newString[0][0]);
Dessa maneira o método retorna um array com o tipo correto de elemento. A versão anterior retornava um array de object, por isso o ClassCastException.
V
VagnerMG
Não seria mais fácil você passar os dados atravéz do Model da tabela não??
Não sei se é isso que você procura, mas de qualquer forma está aí!
Jesuino_Master
Vou dar uma dica que uso. Eu conto as linha percorrendo o RS antes, sem nenhuma operação… Não uso isso em aplicativos mais sérios, pois sei da implicação com performance quando temos muitas linhas…