Boa Tarde galera. Estou tentando armazenar o RS de uma string SQL dentro de um array com a quantidade de linhas de acordo com o ResultSet e as colunas defini manual, mas clico para depurar o cod ele não alimenta o array com os dados. pula direto para o catch (Exception e);
conecta.conexao();
try {
conecta.executaSQL("select * from tbl_produtos")
//DETERMINA TAMANHO DA MATRIZ DE ACORDO COM O RS
int contaLista=0;
String[][]lista=new String[contaLista][3];
while(conecta.rs.next()) {
contaLista++;
}
for(int cont=0;cont<contaLista;cont++) {
lista[cont][1]=conecta.rs.getString("nom_produto");
lista[cont][2]=conecta.rs.getString("descricao");
lista[cont][3]=conecta.rs.getString("valor");
}
//EXIBE LISTA
for(int i=0; i<lista.length;i++) {
//COMO IMPRIMIR ESSE ARRAY?
}
conecta.desconecta();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Erro !"+e);
}
Connection con;
PreparedStatement pst;
ResultSet rs;
public matriz(){
try {
con = conexao_postgres();
} catch (ClassNotFoundException ex) {
Logger.getLogger(matriz.class.getName()).log(Level.SEVERE, null, ex);
}
int contaLista=0;
String sql = "select nome, informacoes, empresa from principal";
try {
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
//Carrega a matriz
while(rs.next()){
contaLista++;
}
String[][]lista=new String[contaLista][3];
int con = 0;
rs = pst.executeQuery();
while(rs.next()){
lista[con][0]=rs.getString("nome");
lista[con][1]=rs.getString("informacoes");
lista[con][2]=rs.getString("empresa");
con++;
}
//Ler a matriz
for(int i = 0; i<contaLista; i++){
System.out.println("Lista Nº "+i);
for(int y = 0; y<=2; y++){
System.out.println(lista[i][y]);
}
}
} catch (SQLException ex) {
Logger.getLogger(matriz.class.getName()).log(Level.SEVERE, null, ex);
}
}
O Começo está semelhante ao seu, onde ele pesquisa e conta quantos registro possui.
Acabei descobrindo o porque do seu dar erro.
int contaLista=0;
String[][]lista=new String[contaLista][3];
while(conecta.rs.next()){
contaLista++;
}
vc fez assim, mas n adianta fazer um contaLista++ se já foi setado String[][]lista=new String[contaLista][3]; anteriormente… pode observar no meu exemplo, que ele está depois.
Qualquer duvida por perguntar.
Sabe que esse y, é para percorrer as colunas… se vc colocar lista.lenght, vai dar errado.
se vc possui , nom_produto, descricao e valor. deveria ser y<=2 pois ele verificaria 0,1,2 que são 3.
se for, emp_fil e emp, deveria ser y<=1, q ele verificaria 0 e 1, que são 2.
corrigido continua sem funcionar, quando crio uma variavel qualquer e armazeno um campo qualquer da tabela, essa variavel consegue armazenar normalmente, mas quando tento armazenar ela em um vetor fica dando erro, quando depuro o cod, ele entra no while quando vai armazer o primeiro valor ela pula direto pro catch
o problema é que ele nem chega a gravar no vetor ele pula direto pro catch, quando depuro o codigo ele entra no while vai pra primeira linha que é lista[cont2][0]=conectaIcms.rs.getString(“EMP_FIL”); quando dou um F8 pra ir pra proxima linha ele vai direto pro catch. e o vetor nessa posição fica vazio
coloquei o select antes do while e ainda setei na primeira posição antes de entrar pro while > conectaIcms.rs.first(); mesmo assim quando depuro o cod ele entra no while e quando vai gravar a primeira linha pula direto pro catch
conectaIcms e um nome qualquer que dei pra minha conexao com o banco, na verdade a minha string sql é gigante com varios inner join, coloquei uma simples so para exemplo e ai com base nisso resolver o problema aqui na empresa.
Pq no seu exemplo, esse conectaIcms.rs.first(); vai para o primeiro resultado.
Mas e o próximo?
seu resultset deve ser capturado dentro de um laço para pegar registro por registro.
por isso, enquanto conectaIcms.rs.next() ele achar resultado, vai setando e aumentando o contador.
cara muito obrigado resolvi meu problema, por algum motivo quando me disse pra criar a segunda query e setar na primeira posição não tinha ido, mas agora foi.
conectaIcms.executaSQL(“SELECT NFME.EMP_FIL AS emp, NFME.N_FISCAL as num, NFME.SERIE as serie, NFME.FORNEC, NFME.TIPO_MOVTO, NFME.CGC, CRCL.RAZ_SOCIAL, NFME.DT_EMISSAO, NFME.VLR_ICM, \n” +
" NFME.VLR_ICM_SUBST, NFME.CFO, NFME.QT_VOLUME, NFME.TIPO_CONTAB, CRCL.COD_PAIS, TGPA.NOME_PAIS\n" +
“FROM NFME INNER JOIN\n” +
" CRCL ON NFME.EMP_FIL = CRCL.EMP_FIL AND NFME.FORNEC = CRCL.CLIENTE LEFT OUTER JOIN\n" +
" TGPA ON CRCL.COD_PAIS = TGPA.COD_PAIS\n" +
“WHERE (NFME.TIPO_MOVTO = 80 OR\n” +
" NFME.TIPO_MOVTO = 311 OR\n" +
" NFME.TIPO_MOVTO = 850) AND (NFME.DT_EMISSAO >= CONVERT(DATETIME, ‘2017-01-01 00:00:00’, 102) AND NFME.DT_EMISSAO <= CONVERT(DATETIME, \n" +
" ‘2017-01-31 00:00:00’, 102)) AND (NFME.CFO <> 5101) AND (TGPA.EMPRESA = 369) AND (TGPA.FILIAL = 1)\n" +
“ORDER BY NFME.TIPO_MOVTO”);