boa tarde estou com problema nos metodos primeiroRegistro(), anteriorRegistro() proximoRegistro(), ultimoRegistro().
nao funciona direito.
while(rs.next())
// o proximoRegistro() vai pro ultimo registro
while(rs.previous())
//o anteriorRegistro() nem funciona
while(rs.first())
//o primeiroRegistro() funciona mais trava o sistema por uns 3 minustos
while(rs.last())
//o ultimoRegistro() funciona mais trava o sistema por uns 3 minustos
alguem me ajude por favor so falta isso pro meu sistema funcionar...
privatevoidproximoRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BDtry{Stringsql="SELECT * FROM aluno";Statementstm=connection.createStatement();try{ResultSetrs=stm.executeQuery(sql);while(rs.next()){DateDataNasc=rs.getDate("DataNasc");SimpleDateFormatmaskData=newSimpleDateFormat("dd/MM/yyyy");Stringnascimento=maskData.format(DataNasc);txfNumMatricula.setText(rs.getString("codigo"));txfNomeAluno.setText(rs.getString("nome"));txfEndereco.setText(rs.getString("endereco"));txfCidade.setText(rs.getString("cidade"));cbxUf.setSelectedItem(rs.getString("Uf"));txfValorMensal.setText(rs.getString("ValorMensal"));txfDataNasc.setText(nascimento);}}catch(Exceptione2){System.out.println("\nErro no resultset!");}}catch(Exceptione2){System.out.println("\nErro no statement!");}}
Boa noite BrunoBastosPJ
nao deu certo tentei implementar o metodo que vc me passou mais nao deu certo
J
JOCIMA
Bom dia Continuo com aquele problema que eu havia citado
so que eu resouvi o erro do
rs.first(); rs.last();
soqueoerrocontinuanors.next();rs.previous();
ResultSet rs = stm.executeQuery(sql);
rs.next();
alguem poderia me ajudar
InSeOfKn
JOCIMA:
Bom dia Continuo com aquele problema que eu havia citado
so que eu resouvi o erro do
rs.first(); rs.last();
soqueoerrocontinuanors.next();rs.previous();
ResultSet rs = stm.executeQuery(sql);
rs.nextt();
alguem poderia me ajudar
cuidado! você esta usando nex[b]tt/b em vez de nex[b]t/b
só o que pude reparar não entendo nada de BD
até!
discorpio
Boa noite a todos.
O Erro persiste porque voce criou um “Statement” que carrega um “ResultSet Unidirecional” (Forward Only), ou seja, os registros só navegam para frente uma única vez, e por isso os métodos rs.first() e rs.previous() não funcionam, porque não podem voltar atrás.
Para carregar um “ResultSet Bidirecional”, ou seja, que vá para adiante e regresse ao primeiro ou anterior, voce deve escrever o seu “Statement” dessa maneira:
O Erro persiste porque voce criou um "Statement" que carrega um "ResultSet Unidirecional" (Forward Only), ou seja, os registros só navegam para frente uma única vez, e por isso os métodos rs.first() e rs.previous() não funcionam, porque não podem voltar atrás.
Para carregar um "ResultSet Bidirecional", ou seja, que vá para adiante e regresse ao primeiro ou anterior, voce deve escrever o seu "Statement" dessa maneira:
TYPE_FORWARD_ONLY: Esta navegação é somente adiante e é configurada como default, em caso de não ser fornecido os parâmetros.
TYPE_SCROLL_SENSITIVE: Navegação para ambos os lados, as alterações na tabela em tempo de execução são refletidas.
TYPE_SCROLL_INSENSITIVE: Similar a segunda opção, a diferença é que as alterações na tabela em tempo de execução, neste caso não são refletidas, por isso, a segunda opção é a mais adequada.
para o segundo parâmetro:
CONCUR_READ_ONLY: ResultSet somente de Leitura.
CONCUR_UPDATABLE: ResultSet que pode ser atualizado.
Um abraço.
"Boa noite discorpio eu tentei implementar o que vc me passou mas nao deu certo veja so ah o codigo ta diferente pois eu passeu parte para um metodo
//Este metodo esta funcionando perfeitamenteprivatevoidprimeiroRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BDtry{statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);resultSet=statement.executeQuery(select);resultSet.first();carregaDados();}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}//Este metodo nao esta funcionandoprivatevoidanteriorRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BDtry{statement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);resultSet=statement.executeQuery(select);resultSet.previous();carregaDados();//METODO COM OS DADOS A SEREM CARREGADOS}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}//Este metodo nao esta funcionandoprivatevoidproximoRegistro(){//METODO QUE CARREGA O PROXIMO REGISTRO DO EM RELACAO A QUAL SE ESTA NO BDtry{statement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);resultSet=statement.executeQuery(select);resultSet.next();carregaDados();//METODO COM OS DADOS A SEREM CARREGADOS}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}//Este metodo esta funcionando perfeitamenteprivatevoidultimoRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BDtry{statement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);resultSet=statement.executeQuery(select);resultSet.last();carregaDados();}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}
"
discorpio
Boa noite Jocima.
Realmente, não vai funcionar os métodos “Previous e Next”, voce sabe por que :?: :?: :?:
Simplesmente porque voce está dando refresh na tabela quando invoca os quatro métodos. :shock:
Ou seja, como voce espera navegar num ResultSet, onde voce o limpa, depois recarrega-o com instruções SQL a toda hora.
Todo ResultSet, assim como DataSets (Delphi) ou RecordSets (VB) , tem dois ponteiros de registros sem a estrutura da tabela, apenas para indicar “Inicio de arquivo (BOF - Begin of File)” e o “Fim de Arquivo (EOF - End of File)” e por isso, dentro do Java (ResultSet), existem métodos que também posicionam nestes ponteiros que são:
Mas o por que, Discorpio, voce está me passando estes conceitos :?:
Não só para ampliar seus conhecimentos, mas como também para inforamar a voce, que quando voce apanha registros da tabela com instruções SQL, o ResultSet é carregado com o ponteiro do registro posicionado em BOF.
Agora vamos ver onde voce está errando:
//Este metodo esta funcionando perfeitamente privatevoidprimeiroRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BD try{statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);// Aqui voce limpa e recarrega o ResultSet e posiciona o ponteiro em BOFresultSet=statement.executeQuery(select);// Aqui voce vai para o primeiro registro após o BOF resultSet.first();carregaDados();}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}// Bom, até aqui a sua lógica tá funcionado//Este metodo nao esta funcionando privatevoidanteriorRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BD try{statement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);// Aqui voce limpa e recarrega o ResultSet e posiciona o ponteiro em BOFresultSet=statement.executeQuery(select);// Aqui voce não vai para lugar nenhum porque não existe registro além de BOF.resultSet.previous();carregaDados();//METODO COM OS DADOS A SEREM CARREGADOS }catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}//Este metodo nao esta funcionando privatevoidproximoRegistro(){//METODO QUE CARREGA O PROXIMO REGISTRO DO EM RELACAO A QUAL SE ESTA NO BD try{statement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);// Aqui voce limpa e recarrega o ResultSet e posiciona o ponteiro em BOFresultSet=statement.executeQuery(select);/*AquipelomenosvoceconseguechegaraoprimeiroregistroporémnuncavoceconseguirsairdeleporqueainstruçãoanteriorlimpaerecarregaoResultSetenovamenteposicionaemBOF.*/resultSet.next();carregaDados();//METODO COM OS DADOS A SEREM CARREGADOS }catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}//Este metodo esta funcionando perfeitamente privatevoidultimoRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BD try{statement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);// Aqui voce limpa e recarrega o ResultSet e posiciona o ponteiro em BOFresultSet=statement.executeQuery(select);// Aqui voce consegue ir para o último registro.resultSet.last();carregaDados();}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}
Outra dica que te dou é que eu simplesmente acho desnecessário todos esses métodos que voce implementou, só para navegar no ResultSet, quando voce pode utilizá-los diretamente do ResultSet, ou seja, se voce quiser implementar Eventos de componentes, para que criar um método intermediário de navegação de ResultSet, se voce pode invocar ResultSet.first(), …last(), …previous() e …next() diretamente dele :?:
Eu particulamente acho que voce está fazendo redundância, que é o que costumamos chamar no meu trabalho de “Disperdício de Recursos”.
Faça a conexão com o banco de dados apenas uma única vez, e na hora de requisitar os dados da tabela, também o faça, alimentando o ResultSet uma vez, para depois navegar nele, sem ir novamente a tabela no momento da navegação. Apenas requisite novos dados através de SQL, quando for necessário a pesquisa de novos critérios de filtros em registros.
J
JOCIMA
RESOLVIDO
// //esse codigo deve ficar junto da conexaostatement=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);resultSet=statement.executeQuery(select);
privatevoidprimeiroRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BDtry{resultSet.first();carregaDados();}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}privatevoidanteriorRegistro()throwsSQLException{//METODO QUE CARREGA O ULTIMO REGISTRO DO BDtry{resultSet.previous();carregaDados();}catch(Exceptione2){if(txfNumMatricula.getText().equals(resultSet.first())){}}}privatevoidproximoRegistro()throwsSQLException{//METODO QUE CARREGA O PROXIMO REGISTRO DO EM RELACAO A QUAL SE ESTA NO BDtry{resultSet.next();carregaDados();}catch(Exceptione2){if(txfNumMatricula.getText().equals(resultSet.last())){}}}privatestaticvoidultimoRegistro(){//METODO QUE CARREGA O ULTIMO REGISTRO DO BDtry{resultSet.last();carregaDados();}catch(Exceptione2){System.out.println("ERRO: "+e2.getMessage());}}