ResultSet

15 respostas
esgoncalves

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!

15 Respostas

M

Adicione eventos aos botões que manipule o ResultSet… onde:

<<
rs.first();

<
rs.previous();

rs.next();

rs.last();

ateubh

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. :?:

E

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!!!

ateubh

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

M

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();
E

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

M

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…

M

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…

fredferrao

vc fez assim???:

seuPreparedStatement = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

ou simplemente com Statement.

E

mvsoares,
acho que tu já vai me mandar pastar mesmo.

unsupported method previous

E

Fred,

não fiz isso pq não estou usando prepare statement. Estou chamando uma stored procedure

nesse caso como eu faço?

R

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

fredferrao

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);
E

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!!

esgoncalves

Camaradas! Valeu pela dica… Consegui implementar… Só uma dúvida: como faço para garantir que se está no primeiro registro ou no último?

Criado 18 de junho de 2006
Ultima resposta 20 de jun. de 2006
Respostas 15
Participantes 6