Preciso manipular registros, sendo que tenho que implementar quatro botões: (<<) para ele ir para o primeiro registro, (>) para o próximo, (<) para o anterior e (>>) para o último… Como fazer isso? Grato!
ResultSet
15 Respostas
Adicione eventos aos botões que manipule o ResultSet… onde:
<<
rs.first();
<
rs.previous();
rs.next();
rs.last();
mvsoares
Adicione eventos aos botões que manipule o ResultSet… onde:<<
rs.first();<
rs.previous();
rs.next();
rs.last();
Mas se eu fizer isso não vou ter que instanciar o recordset em minha classe de visão perdendo assim o conceito de MVC? E se eu deixá-la na camada de persistência, assim que ela for desalocada ela é desalocada. :?:
Eu estou tendo problemas com o rs.first.
Qdo uso o rs.first com o mySQL funciona perfeito mas qdo uso com o Sql server me dá um erro do tipo: Unsupported rs.first
Qual seria o problema?
Não existe rs.first para driver de sql ? se não, como faria então para ir para o primeiro registro ?
Ah! e tb como faço para contar os registros??
Obrigado!!!
Eu costumo fazer da seguinte forma… quando faço a pesquisa, insiro todos os dados em um vector… ele tem todas as propriedades que você precisa… mas é um objeto lento
No Sql Server utilize:
rs.beforeFirst();
rs.next();
Para obter o número de registros utilize:
rs.last();
int numResultados = rs.getRow();
// volta para antes do primeiro registro, se utilizar rs.next() vai para o primeiro
rs.beforeFirst();
mvsoares,
qdo tentei utilizar o rs.beforefirst(), me retornou este erro
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.beforeFirst
e qdo tentei o rs.last
int numResultados = rs.getRow();
rs.beforefirst();
tb me retornou este erro:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last
achei tb um afterlast(), mas.
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.afterlast
Ah! o rs.next blz, funciona normal
Pois bem, o SQL Server não suporta esses métodos…
Você terá que criar métodos manualmente…
por exemplo
primeiro () {
while (rs.previous() != null) { rs.previous(); }
}
e assim por diante…
Pois bem, o SQL Server não suporta esses métodos…
Você terá que criar métodos manualmente…
por exemplo
primeiro () {
while (rs.previous() != null) { rs.previous(); }
}
e assim por diante…
vc fez assim???:
seuPreparedStatement = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ou simplemente com Statement.
mvsoares,
acho que tu já vai me mandar pastar mesmo.
unsupported method previous
Fred,
não fiz isso pq não estou usando prepare statement. Estou chamando uma stored procedure
nesse caso como eu faço?
Não conheço sobre o assunto e posso estar falando besteira.
Isso não é problema do driver jdbc que está usando ?
[]s
Roger Leite
Do mesmo jeito!!! para usar o first, previous e etc, vc tem que dizer, pois o default é forward only, olha o javadoc:
CallableStatement prepareCall(String sql,
int resultSetType,
int resultSetConcurrency)
throws SQLException
Creates a CallableStatement object that will generate ResultSet objects with the given type and concurrency. This method is the same as the prepareCall method above, but it allows the default result set type and concurrency to be overridden.
Parameters:
sql - a String object that is the SQL statement to be sent to the database; may contain on or more ? parameters
resultSetType - a result set type; one of ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, or ResultSet.TYPE_SCROLL_SENSITIVE
resultSetConcurrency - a concurrency type; one of ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
Returns:
a new CallableStatement object containing the pre-compiled SQL statement that will produce ResultSet objects with the given type and concurrency
Throws:
SQLException - if a database access error occurs or the given parameters are not ResultSet constants indicating type and concurrency
Since:
Tu ta usando CallableStatement certo??
entao so muda:
seuCallableStatement = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
Quero agradecer aos que me ajudaram. conseguí resolver o problema.
Não sabia disso do ResultSet.TYPE_SCROLL_INSENSITIVE
Eu tenho uma SP que uso Callable e tb tenho um a view que ai eu uso:
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Agora sim ,. está funcionando.
Mas pq sem isso, ele não suporta o método firs,last,beforefirst,etc… ???
Por padrão eele é Forward Only ???
Mais uma vez, obrigado a todos!!
Camaradas! Valeu pela dica… Consegui implementar… Só uma dúvida: como faço para garantir que se está no primeiro registro ou no último?