Voltar para o primeiro registro

29 respostas
E

Ola amigos(as), eu estou com um problema aqui e não sei como resolver, dei uma olhada em alguns tutoriais e infelizmente não achei, ou melhor, achei mas acho que não serviu totalmente…

o que eu gostaria de saber é como depois que executei um next, voltar para o inicio do banco de dados, no meio do código eu explico melhor o que esta acontecendo… eu deixei bem visivel…

if (!resultado.next()) {

%>

<p><font size=4 face=Verdana, Arial, Helvetica, sans-serif><strong>:: Telefones ::
<table width=“100%” cellpadding=“2” cellspacing=“0”>

<tr bgcolor="#006699">

<td bgcolor="#364B85"> <div align=“left”><font color="#FFFFFF" size=“3” face=“Verdana, Arial, Helvetica, sans-serif”><strong>N</strong></font><font color="#FFFFFF" size=“1” face=“Verdana, Arial, Helvetica, sans-serif”>ão existem telefones</font></div></td>

</tr>

</table>

</strong></font></p>

<%

} else {

%>

<p><font size=“4” face=“Verdana, Arial, Helvetica, sans-serif”><strong>:: Telefones ::</strong></font></p>

<%

gostaria de colocar aqui o retorno ao primeiro registro
gostaria de colocar aqui o retorno ao primeiro registro
gostaria de colocar aqui o retorno ao primeiro registro
gostaria de colocar aqui o retorno ao primeiro registro
gostaria de colocar aqui o retorno ao primeiro registro

porque assim eu conseguiria mostrar todos os registros e não iria faltar o primeiro pois isso é o que acontece…

while (resultado.next()){

id_grupo1=(int)resultado.getInt(“cdGrupo”);

if (!(id_grupo1 == id_grupo2)) {

%>

<table width=“100%” cellpadding=“2” cellspacing=“0”>

<tr bgcolor="#364B85">

<td colspan=“3”> <font color="#FFFFFF" size=“2” face=“Verdana, Arial, Helvetica, sans-serif”><strong>DEPARTAMENTO:

<%=resultado.getString(nmGrupo)%></strong></font>

muito agradecido para aqueles que consiguirem me ajudar e os que não… pois o que conta aqui é a boa vontade… ja entrei varias vezes e sei que posso contar com o pessoal… FELIZ 2004 PARA TODOS!!!

29 Respostas

R

Ha um pequeno erro de logica, por isso que “some” um registro.

Ao inves de fazer

if &#40;!rs.next&#40;&#41;&#41; &#123; ..

vc pode fazer

if &#40;rs.next&#40;&#41;&#41; &#123;
    ...
&#125;
else &#123;
    // nao ha registros
&#125;
if &#40;!rs.next&#40;&#41;&#41; &#123;
    // nao ha registros
&#125;
else &#123;
    do &#123;
    &#125; while &#40;rs.next&#40;&#41;&#41;;
&#125;

De qq maneira, para ir para antes do primeiro registro ( ou seja, antes do primeiro rs.next() ) vc usa o metoto beforeFirst().

Rafael

E

Oi Rafael, obrigado por estar me ajudando, então
eu fiz como vc havia me dito em um dos exemplos, este também não funcionou, aconteceu a mesma coisa

if (rs.next()) {



}

else {

// nao ha registros

}

e esse tambem não…

if (!rs.next()) {

// nao ha registros

}

else {

do {

} while (rs.next());

}

tambem tentei colocar o beforefirst
mas deu esse erro
HTTP Status 500 -

vc pode me dar outro toque… obrigado Rafael

eu vou fazer o seguinte… vou jogar todo meu codigo, talvez vc tenha uma visao melhor se tiver tempo de olhar é claro…

<%@ page import=java.sql.*, conexao.Ramais%>

<%

Ramais listarRamais = new Ramais();

%>

<html>

<head>

<title>ResultadoJsp</title>

</head>
<table width="543" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="543" height="923" valign="top"> <% int contador=1; int id_grupo1=0; int id_grupo2=0; contador=1; id_grupo1=0; id_grupo2=0; listarRamais.conexao(); ResultSet resultado = listarRamais.stmt.executeQuery("Select * FROM consulta_geral ORDER BY cdGrupo"); if (!resultado.next()) { %> <p><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><strong>:: Telefones ::
<table width="100%" cellpadding="2" cellspacing="0"> <tr bgcolor="#006699"> <td bgcolor="#364B85"> <div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif"><strong>N</strong></font><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">ão existem telefones</font></div></td> </tr> </table> </strong></font></p> <% } else { %> <p><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><strong>:: Telefones ::</strong></font></p> <% resultado.beforeFirst(); while (resultado.next()){ id_grupo1=(int)resultado.getInt("cdGrupo"); if (!(id_grupo1 == id_grupo2)) { %> <table width="100%" cellpadding="2" cellspacing="0"> <tr bgcolor="#364B85"> <td colspan="3"> <font color="#FFFFFF" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>DEPARTAMENTO: <%=resultado.getString("nmGrupo")%></strong></font> </td> </tr> <tr bgcolor="#6A95B5"> <td width="5%"> <div align="left"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">SETOR</font></div> </td> <td width="5%"> <div align="left"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">RAMAL</font></div> </td> <td width="5%"> <div align="left"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">DIRETO</font></div> </td> </tr> <%} id_grupo2 = id_grupo1; if (contador == 1) { contador=0; %> <tr bgcolor="#C7D7E2"> <td bgcolor="#E9EFF3" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nmSetor")%></font></div> </td> <td bgcolor="#E9EFF3" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrRamal")%></font></div> </td> <td bgcolor="#E9EFF3" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrTelefone")%></font></div> </td> </tr> <% } else { contador=1; %> <tr bgcolor="#FFFFFF"> <td bgcolor="#FFFFFF" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nmSetor")%></font></div> </td> <td bgcolor="#FFFFFF" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrRamal")%></font></div> </td> <td bgcolor="#FFFFFF" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrTelefone")%></font></div> </td> </tr> <%}%> <%}%> </table> <%}%> </td> </tr> </table> <% resultado.close(); listarRamais.stmt.close(); listarRamais.conexao.close(); %> </html>
E

Engraçado que quando eu tiro a parte do primeiro if funciona perfeitamente… só deixando o while entendeu… pois assim ele não passa pelo primeiro next que esta no if…

por isso acho interessante aquele beforefirst mas da aquele erro que te falei acima…
HTTP Status 500 -

J

Cara,
Quando vc utiliza usa:

if&#40;rs.next&#40;&#41;&#41; &#123;alguma coisa&#125;

vc move o “ponteiro” uma posição, como vc esta na primeira ele passa por ela.Faça como o Rafael falou depois de testar se veio registros utilize:

rs.beforeFirst&#40;&#41;;

Note que java é caseSensitive portanto o correto é:rs.beforeFirst&#40;&#41;;com o “F” maiusculo.
Esse deve ser o erro que esta dando.
Espero ter ajudado.

[]'s

E

Oi João, obrigado pela ajuda… então

foi eu que digitei errado o beforeFirst na hora em que eu mandei para o nosso amigo… mas eu no código aqui fiz certo… e ainda continua dando erro…

agora quando eu nao coloco o before continua legal, mas com o mesmo problema…

eu só coloquei no if o next porque não conheco outra forma… veja bem… é óbvio que é diferente… mas no vb eu quando quero saber se uma tabela esta vazia eu simplesmente faço assim

if rs.EOF then
nao tem nenhum registro
else
tem alguma registro
endif

ou seja… ele nao vai para registro nenhum, mas no java eu nao vi outro jeito sem ter que usar o next… desculpa a ignorancia… to tentando ainda… eu fiz do jeito que foi falado e ainda nao consegui…
o código modificado ficou assim: sera que vc poderia dar uma olhada

<%@ page import=java.sql.*, conexao.Ramais%>

<%

Ramais listarRamais = new Ramais();

%>

<html>

<head>

<title>ResultadoJsp</title>

</head>
<table width="543" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="543" height="923" valign="top"> <% int contador=1; int id_grupo1=0; int id_grupo2=0; contador=1; id_grupo1=0; id_grupo2=0; listarRamais.conexao(); ResultSet resultado = listarRamais.stmt.executeQuery("Select * FROM consulta_geral ORDER BY cdGrupo"); if (resultado.next()) { %> <p><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><strong>:: Telefones ::</strong></font></p> <% resultado.beforeFirst(); while (resultado.next()){ id_grupo1=(int)resultado.getInt("cdGrupo"); if (!(id_grupo1 == id_grupo2)) { %> <table width="100%" cellpadding="2" cellspacing="0"> <tr bgcolor="#364B85"> <td colspan="3"> <font color="#FFFFFF" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>DEPARTAMENTO: <%=resultado.getString("nmGrupo")%></strong></font> </td> </tr> <tr bgcolor="#6A95B5"> <td width="5%"> <div align="left"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">SETOR</font></div> </td> <td width="5%"> <div align="left"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">RAMAL</font></div> </td> <td width="5%"> <div align="left"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">DIRETO</font></div> </td> </tr> <%} id_grupo2 = id_grupo1; if (contador == 1) { contador=0; %> <tr bgcolor="#C7D7E2"> <td bgcolor="#E9EFF3" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nmSetor")%></font></div> </td> <td bgcolor="#E9EFF3" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrRamal")%></font></div> </td> <td bgcolor="#E9EFF3" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrTelefone")%></font></div> </td> </tr> <% } else { contador=1; %> <tr bgcolor="#FFFFFF"> <td bgcolor="#FFFFFF" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nmSetor")%></font></div> </td> <td bgcolor="#FFFFFF" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrRamal")%></font></div> </td> <td bgcolor="#FFFFFF" width="30%"> <div align="left"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%=resultado.getString("nrTelefone")%></font></div> </td> </tr> <%}%> <%}%> </table> <% } else { %> <p><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><strong>:: Telefones ::
<table width="100%" cellpadding="2" cellspacing="0"> <tr bgcolor="#006699"> <td bgcolor="#364B85"> <div align="left"><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif"><strong>N</strong></font><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">ão existem telefones</font></div></td> </tr> </table> </strong></font></p> <%}%> </td> </tr> </table> <% resultado.close(); listarRamais.stmt.close(); listarRamais.conexao.close(); %> </html>
R
pstmt = conDefault.prepareStatement&#40;strSQL,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY&#41;;

Para se movimentar dentro de um resultSet, mas com isso vc está remendando um erro no seu código (e mal remendado), como o Rafel colocou está correto.

T
if&#40;rs.next&#40;&#41;&#41;&#123;

  do&#123;

   .....

  &#125;while&#40;rs.next&#40;&#41;&#41;;

&#125;
else&#123;
não  registros no resultset
&#125;
R

Ou então bota o primeiro pra fora do while... é melhor do que criar o statement rolável. Assim:

if &#40;rs.next&#40;&#41;&#41; &#123; %&gt;

   Sem resultados

&lt;% else &#123;
   
   comando aqui;

   while &#40;rs.next&#40;&#41;&#41; &#123;
      
      comando aqui;

   &#125;

&#125;
   %&gt;
E

[quote=“rdbj”] pstmt = conDefault.prepareStatement&#40;strSQL,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY&#41;;

eu vou voltar e deixar como rafael inicialmente me disse para deixar, mas isso que vc colocou aqui em cima não entendi…

E
"thiagorani":
if&#40;rs.next&#40;&#41;&#41;&#123;

  do&#123;

   .....

  &#125;while&#40;rs.next&#40;&#41;&#41;;

&#125;
else&#123;
não  registros no resultset
&#125;

isso tambem nao deu certo, acontece a mesma coisa...

E
"Rodrigo.Decalque":
Ou então bota o primeiro pra fora do while... é melhor do que criar o statement rolável. Assim:
if &#40;rs.next&#40;&#41;&#41; &#123; %&gt;

   Sem resultados

&lt;% else &#123;
   
   comando aqui;

   while &#40;rs.next&#40;&#41;&#41; &#123;
      
      comando aqui;

   &#125;

&#125;
   %&gt;

mas isso foi o que eu fiz...

comando aqui; o que seria esse comando aqui que vc colocou? nao entedi?

while (rs.next()) {

comando aqui; o que seria esse comando aqui que vc colocou? nao entedi?

R

Esse ultimo exemplo nao funciona como vc quer logicamente. “comando aqui” sao os comandos que voce quer que execute.

Os exemplos anteriores que foram postados funcionam. Se voce esta tendo algum outro problema, qual que eh?

Rafael

E

não to tendo nenhum outro problema é só esse mesmo…
eu fiz do jeito que falaram pra mim e quando eu deixo o beforeFirst da esse erro

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Result set type is TYPE_FORWARD_ONLY

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:193)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:589)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)

at java.lang.Thread.run(Thread.java:534)

root cause

javax.servlet.ServletException: Result set type is TYPE_FORWARD_ONLY

at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:536)

at org.apache.jsp.telefones_jsp._jspService(telefones_jsp.java:221)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:193)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:589)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)

at java.lang.Thread.run(Thread.java:534)

Apache Tomcat/4.1.29

R

Se voce nao usar o beforeFirst(), voce nao tera esse problema.
Eh melhor vc fazer os if’s de maneira que vc primeiro trate se executou ( ou usar o do-while ) do que testar se nao executou e entao voltar para o primeiro registro.

De qualquer maneira, se quiser usar o beforeFirst(), passe

ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY

como argumento para o metodo que voce cria o statement ( createStatement, por exemplo )…

Rafael

T

Putz cara ja usei esse esquema de do-while para uma situacao identica a sua e funcionou legal.
Da uma conferida no codigo. :wink:

E

Realmente, se eu nao usar o beforeFirst() eu nao tenho este problema, mas ai o primeiro registro vai continuar nao aparecendo… e eu testei com todas as maneiras que os moderadores me passaram… chega ser até triste, porque eu trampo com isso a 7 anos só que de forma diferente pois uso outra linguagem…

simplismente

if rs.eof then
nao existe nada
else
do while

blablablablablablabla

rs.movenext
loop
endif

e pronto, entendeu, nao tem segredo, na outra linguagem que eu sei, mesmo eu perguntando se esta no fim de arquivo não tem problema, porque ele nao passa nos registros e como no next do java eu ja comecei a passar pelos registros o proximo é o segundo registro mesmo, por isso acho que tem que ter alguma forma de voltar antes do do while para o primeiro registro novamente ja que o next começa direto nos registros… só que eu usando o beforeFirst() da aquele problema, entao eu vou fazer desta forma que vc me disse ta bem… só que o problema é que sou leigo neste assunto de statement, ResultSet e tal… isso eu nao sei mesmo como fazer… sera que vc pode me informar algum tutorial para eu ir a busca para saber como fazer tudo isso… pra vc ter uma ideia, eu não sei onde fica isso…

Código:

ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY

como argumento para o metodo que voce cria o statement ( createStatement, por exemplo )…

R

http://www.google.com/search?q=ResultSet.TYPE_SCROLL_SENSITIVE
http://www.google.com/search?q=jdbc+tutorial

Rafael

E

Cara, sera que vc consegue me entender, ou fazer eu entender onde estou errando por favor… talvez eu ja nao consiga mais ver o codigo, sei la…

if (!resultado.next()) { (essa foi a maneira de eu falar que nao existe nada no banco de dados )
  %&gt;
      Não existem telefones
  &lt;%
  } else {
  %&gt;
     
      eu acho que aqui deveria ter alguma voltar para o começo dos registros pois ja estou usando o next e ele ja foi para o segundo registro como eu acho que esta acontecendo... pois começa a aparecer do segundo registro pra baixo...           

      while (resultado.next()){
      id_grupo1=(int)resultado.getInt("cdGrupo");
      if (!(id_grupo1 == id_grupo2)) {
R

Mas entao… ele ta comecando no segundo registro por causa das razoes que a gente ja falou nas mensagens anteriores.

Quando voce faz

if &#40;!rs.next&#40;&#41;&#41;

o sistema JA avancou o cursor, ou seja, ele ja esta no primeiro registro. Como no else vc faz

while &#40;rs.next&#40;&#41;&#41;

ele logicamente ira comecar do segundo. Por isso que voce deveria fazer

do &#123;
&#125; while &#40;rs.next&#40;&#41;&#41;;

assim ele usa o primeiro registro.

Rafael

C

Da maneira que você fez, só começa a aparecer do segundo registro porque você está chamando rs.next() duas vezes. Quando você obtém um ResultSet, a posição inicial dele é antes do primeiro registro. Você só vai acessar o primeiro registro depois que fizer uma chamada a next(). No seu código, você usa next() para verificar se existem registros, e depois usa a chamada de novo para iterar pelo ResultSet.

Fazendo da maneira que o Rafael colocou, seu problema vai pro espaço:

“Rafael Steil”:
if &#40;rs.next&#40;&#41;&#41; &#123; do &#123; // mostra registros &#125; while &#40;rs.next&#40;&#41;&#41;; &#125; else &#123; // nao ha registros &#125;

[editado]
Oops, o Rafael já tinha respondido quando postei… :roll:
[/editado]

T

Qual banco voce esta usando edgar?

E

Eu estou usando ACCESS, eu uso oracle tambem, mas como é só um cadastrinho de telefones… nao vejo problema…

E

Eu vou tentar novamente como vc’s estao falando, entao ta bom gente, eu só posso agradecer a paciencia de todos vocês…

T

edgar perguntei do banco não pelo tamanho da sua aplicação, mas sim porque os bancos tem caracteristicas próprias e em alguns casos comportamentos diferentes.

E

Quem dera meu problema ir para o espaço, to achando que vai ser eu que vou pro espaço daqui a pouco hehehe

cara… eu fiz isso que vc me falou e ta dando erro…
essa parte que vc faz a separação

do{

// mostra registros

} while (rs.next());

}

é isso mesmo… é uma separação mesmo…
eu conheco

do while
blablabla
loop

agora

do
blablabla
while

é isso mesmo… que eu entendi???

E

É isso mesmo galera… vocês estavam certos o tempo inteiro e eu que nao conseguia enchergar o obvio que é o lance

do{

// mostra registros

} while (rs.next());

}

desculpem-me, foi por falta de atenção mesmo… Um abraço para todos vocês, não deve ter sido facil me aturar… Um feliz ano novo… querem um susto agora, (EU VOLTO) tudo de bom :silly:
TODOS VOCÊS ESTAO DE PARABÉNS…

R

Segundo a especificacao do Java, eh exatamente como colocamos nos exemplos. Qual o erro que voce esta tendo?

Lembrando que se vc fizer

ResultSet rs = statement.executeQuery&#40;&#41;;

do &#123;
    // blabla
&#125; while &#40;rs.next&#40;&#41;&#41;;

vc tera um erro dizendo que o cursor ainda nao foi iniciado ( por isso que chamados o rs.next() ).

Agora, se vc fizer

if &#40;rs.next&#40;&#41;&#41; &#123;
    do &#123;
        // xxx
    &#125; while &#40;rs.next&#40;&#41;&#41;;
&#125;

entao tem que funcionar. se nao esta funcionando, qual eh o erro? fica dificil pra gente adivinhar.

Rafael

E

entao, agora ta funcionando legal… Parabens pra vc’s, estava tudo certo o jeito que me falaram, eu é que não percebia… a parte da separação

if (rs.next()) {

do {

// xxx

} while (rs.next());

}

valeu galera…

T

É isso ae. Toca o barco!
Estamos por aqui!

Criado 6 de janeiro de 2004
Ultima resposta 8 de jan. de 2004
Respostas 29
Participantes 7