Tenho uma pagina que faz um select no BD, ai pego o resultado pelo ResultSet, só que quando mando ele mostra, ele pula o primeiro nome do banco…
segue o código
[code]public ResultSet mostraDados(){
ResultSet rs = null;
Connection con = null;
Statement st = null;
//fazendo a conexao com o banco de dados
conectaBD conexao = new conectaBD();
String selectTodosDados = "SELECT * FROM cadlogin";
try{
con = conexao.getConnection();
st = con.createStatement();
rs = st.executeQuery(selectTodosDados);
while(rs.next()){
rs.getString("cadlogin_nome");
// System.out.println(rs.getString("cadlogin_nome"));
return rs;
}
}catch(SQLException e){
e.printStackTrace();
}
return null;
}[/code]
aqui estou fazendo o teste no MAIN
listaDadosCadastro rss = new listaDadosCadastro();
ResultSet rs = rss.mostraDados();
while(rs.next()){
System.out.println(rs.getString("cadlogin_nome"));
}
[quote=bruce1010]Tenho uma pagina que faz um select no BD, ai pego o resultado pelo ResultSet, só que quando mando ele mostra, ele pula o primeiro nome do banco…
segue o código
[code]public ResultSet mostraDados(){
ResultSet rs = null;
Connection con = null;
Statement st = null;
//fazendo a conexao com o banco de dados
conectaBD conexao = new conectaBD();
String selectTodosDados = "SELECT * FROM cadlogin";
try{
con = conexao.getConnection();
st = con.createStatement();
rs = st.executeQuery(selectTodosDados);
while(rs.next()){
rs.getString("cadlogin_nome");
// System.out.println(rs.getString("cadlogin_nome"));
return rs;
}
}catch(SQLException e){
e.printStackTrace();
}
return null;
}[/code]
aqui estou fazendo o teste no MAIN
listaDadosCadastro rss = new listaDadosCadastro();
ResultSet rs = rss.mostraDados();
while(rs.next()){
System.out.println(rs.getString("cadlogin_nome"));
}
[/quote]
Toda vez que você acessa um elemento no ResultSet, ele nunca mais será acessado.
Logo, por que razões você retorna o ResultSet somente depois de entrar no while, que acesa o primeiro elemento do mesmo?
Se você fizer:
if(rs.next()){
while(rs.next()){
}
}
Quando for ler algo dentro do while, já estará no segundo elemento (que pode nem existir).
Pensei em fazer dessa forma usando primeiro o IF e depois o while, só que antigamente conseguia pegar todos os valores dentro do BD.
eu retorno ele dentro do WHILE por que ele já tem todos os dados do select…
fiz da forma que vc falou só que deu o seguinte erro - > org.postgresql.util.PSQLException: Operação requer um ResultSet rolável, mas este ResultSet é FORWARD_ONLY (somente para frente).
if(rs.first){
while(rs.next()){
return rs;
}
}
Eu citei este exemplo justamente para que você faça o inverso.
Você não tem que acessar nenhuma posição do ResultSet, caso contrário, já perderá um registro.
Toda vez que você invoca o método next, do ResultSet, um resultado é acessado e nunca mais poderá ser obtido novamente (não exatamente, mas entenda assim).
Embora eu discorde da tua abordagem (o ResultSet nunca deveria ser enviado à outro objeto), você não deve por if, switch ou mesmo while para enviá-lo.
Sou novo em programação, então não entendo muito ;(…
Conseguir resolver isso da seguinte maneira…
[code] st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
while(rs.next()){
system.out.println(rs.getString("cadNome");
}
[/code]
Não sei se é a maneira certa para se fazer, mas só conseguir mostrar todos os campos do banco dessa forma
[quote=bruce1010]Sou novo em programação, então não entendo muito ;(…
Conseguir resolver isso da seguinte maneira…
[code] st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
while(rs.next()){
system.out.println(rs.getString("cadNome");
}
[/code]
Não sei se é a maneira certa para se fazer, mas só conseguir mostrar todos os campos do banco dessa forma[/quote]
Tem duas coisas aqui que estão erradas:
1 - “Sou novo em programação e não entendo muito”. Você não saber, não é demérito. Demérito é você não saber e não ter a mínima vontade e/ou iniciativa de ir atrás do por que não funcionar.
2 - O resultado é apresentado por completo nesta abordagem por que você está tendo acesso à todos os elementos do ResultSet, todos os resultados estão nele e são apresentados.
Você conhece arrays? Um ResultSet é como um array, com pequenas diferenças.
A principal diferença é que quando você coloca valores num array, eles ficam lá até que você os altere.
No caso do ResultSet, quando você lê uma posição (chamando o método next), quando passa para o próximo, ele se torna inacessível, como se tivesse sido apagado. Ou seja, você nunca pode voltar numa posição do ResultSet que já foi lida.
Então, quando você verifica se há elementos no ResultSet, para iniciar o while, ele está entrando no primeiro resultado. Se você invocar qualquer método get, como o getString, você terá o resultado de acordo com o que está pedindo.
Veja que no modo anterior, você entra no while, acessando a primeira posição. Se ele entra no while, você o envia para o método de teste, através do return. Após recebê-lo no método de teste, você chama de novo o método next, passando ao segundo resultado. Então, tem a impressão de não conseguir acessar o primeiro resultado.
Sugiro fortemente que você estude. Essa história de “aprender fazendo” pode até funcionar, mas você nunca saberá os por quês das coisas. Sem saber como acontece, fica difícil conseguir fazer direito.