ResultSet?

8 respostas
J

Galera,

Estou com o seguinte problema, recebo o resultado de um “SELECT codigo, nome FROM clientes WHERE codigo=1” em um ResultSet, até ae tudo bem, quando acesso a primeira vez o conetúdo dos campos tudo funciona, algo do tipo “String nome = rs.getString(“nome”);” ou “int codigo = rs.getString(“codigo”);”, porém se eu tenho que acessar novamente os valores do ResultSet, da mesma maneira que funcionou na primeira vez, ou seja, tentar receber os valores da coluna novamente com rs.getString(“nome”) por exemplo, retorna o erro: java.sql.SQLException: No data found

Por que???

OBrigado

8 Respostas

G

Qual é o banco???
Você está dando um rs.next();

J

“GPR”:
Qual é o banco???
Você está dando um rs.next();

O banco é MySQL, via JDBC, estou dando um rs.next() sim, tanto que a primeira vez ele retorna o valor do campo corrtamente, quando chamo a segunda vez é que da a mensagem de erro, será que eu só posso chamar este método (getXXXXX(coluna)) uma única vez por coluna? Acredito que não…

G

No SQL Server, não consigo chamar duas vezes a mesma coluna, com Oracle eu consigo. MySql não testei, mas experimente criar variável, assim vc pode usar sem problemas

com SQLServer, sempre que preciso usar o conteúdo retornado, coloco em variáveis…

...
String nome = rs.getString("nome");
String endereco = rs.getString("endereco");
...
F

“jmozer”:
Galera,

Estou com o seguinte problema, recebo o resultado de um “SELECT codigo, nome FROM clientes WHERE codigo=1” em um ResultSet, até ae tudo bem, quando acesso a primeira vez o conetúdo dos campos tudo funciona, algo do tipo “String nome = rs.getString(“nome”);” ou “int codigo = rs.getString(“codigo”);”, porém se eu tenho que acessar novamente os valores do ResultSet, da mesma maneira que funcionou na primeira vez, ou seja, tentar receber os valores da coluna novamente com rs.getString(“nome”) por exemplo, retorna o erro: java.sql.SQLException: No data found

Por que???

OBrigado

Cara, talvez o teu problema seja o seguinte:

tu tem um resultset com um registro somente, correto?

O teu ResultSet vem com um “ponteiro” apontando para uma posição invalida… ou seja, voce precisa dar um rs.next() para que o “ponteiro” aponte para o primeiro registro do teu ResultSet… muito bem… voce faz os gets e tudo funciona blz…

Mas quando voce vai acessar os registros desse ResultSet, voce provavelmente esta dando um rs.next() novamente… e o teu “ponteiro” esta apontando para um proximo registro depois do ultimo… entao…usa um rs.first() toda vez que for acessar o teu ResultSet…

Qualquer coisa… posta o codigo direitinho…

J

“felipelo”:
“jmozer”:
Galera,

Estou com o seguinte problema, recebo o resultado de um “SELECT codigo, nome FROM clientes WHERE codigo=1” em um ResultSet, até ae tudo bem, quando acesso a primeira vez o conetúdo dos campos tudo funciona, algo do tipo “String nome = rs.getString(“nome”);” ou “int codigo = rs.getString(“codigo”);”, porém se eu tenho que acessar novamente os valores do ResultSet, da mesma maneira que funcionou na primeira vez, ou seja, tentar receber os valores da coluna novamente com rs.getString(“nome”) por exemplo, retorna o erro: java.sql.SQLException: No data found

Por que???

OBrigado

Cara, talvez o teu problema seja o seguinte:

tu tem um resultset com um registro somente, correto?

O teu ResultSet vem com um “ponteiro” apontando para uma posição invalida… ou seja, voce precisa dar um rs.next() para que o “ponteiro” aponte para o primeiro registro do teu ResultSet… muito bem… voce faz os gets e tudo funciona blz…

Mas quando voce vai acessar os registros desse ResultSet, voce provavelmente esta dando um rs.next() novamente… e o teu “ponteiro” esta apontando para um proximo registro depois do ultimo… entao…usa um rs.first() toda vez que for acessar o teu ResultSet…

Qualquer coisa… posta o codigo direitinho…

Na verdade apenas dá o problema quando tento acessar 2 vezes o mesmo campo, como no exemplo abaixo, a primeira vez o nome do cliente é mostrado, quando é passado para o proximo comando System.out.println ocorre o erro, mas note que é exatamente o mesmo comando, acessando o mesmo campo que na linha acima estava funcionando do mesmo registro…

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection = DriverManager.getConnection("jdbc:odbc:MEUDB","teste","teste"); Statement stmt = connection.createStatement(); ResultSet rsSelect = stmt.executeQuery("SELECT codigo,nome FROM clientes LIMIT 1"); rsSelect.next(); System.out.println("NOMECLI: " + rsSelect.getString("nome")); System.out.println("NOMECLI: " + rsSelect.getString("nome"));

Ou seja, se o problema fosse com o first() ou next() já não teria funcionando na primeira linha System.out.println, pois se trata do mesmo registro. É impossível que eu seja obrigado a guardar todos os valores dos campos de um registro em variáveis para poder utilizar mais do que uma vez…

C

Tenta colocar assim. Acho que o problema acontece porque você não está verificando quantos registros vem no resultset. Desse jeito, com rs.next(), ele fará a impressão enquanto houver registros.
Abraço.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection = DriverManager.getConnection("jdbc:odbc:MEUDB","teste","teste"); Statement stmt = connection.createStatement(); ResultSet rsSelect = stmt.executeQuery("SELECT codigo,nome FROM clientes LIMIT 1"); while (rsSelect.next()){ System.out.println("NOMECLI: " + rsSelect.getString("nome")); System.out.println("NOMECLI: " + rsSelect.getString("nome")); }

G

Hmmmm cara…

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Vc está utilizado ODBC!.. Tente com o jar do driver jdbc do MySQL… Com certeza vai funcionar…

J

“GPR”:
Hmmmm cara…

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Vc está utilizado ODBC!.. Tente com o jar do driver jdbc do MySQL… Com certeza vai funcionar…

Yes!!! É isso mesmo, resolveu!!!

Obrigado cara.

Criado 31 de março de 2006
Ultima resposta 31 de mar. de 2006
Respostas 8
Participantes 4