31.3. Realização de consultas e processamento dos resultados

Para enviar uma declaração SQL para o banco de dados é necessária uma instância de Statement ou de PreparedStatement. Uma vez obtida, a consulta pode ser enviada. É retornada uma instância de ResultSet contendo todo o resultado (veja como alterar este comportamento na Seção 31.3.1 abaixo). O Exemplo 31-1 mostra este processo.

Exemplo 31-1. Processamento de consulta simples usando JDBC

Este exemplo envia uma consulta simples e mostra a primeira coluna de cada linha utilizando Statement.

Statement st = db.createStatement();
ResultSet rs = st.executeQuery("SELECT * " +
                               "FROM minha_tabela " +
                               "WHERE coluna_foo = 500");
while (rs.next()) {
    System.out.print("Coluna 1 retornada ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

Este exemplo usa a mesma consulta anterior, mas utiliza PreparedStatement e um valor vinculado na consulta.

int valor_foo = 500;
PreparedStatement st = db.prepareStatement("SELECT * " +
                                           "FROM minha_tabela " +
                                           "WHERE coluna_foo = ?");
st.setInt(1, valor_foo);
ResultSet rs = st.executeQuery();
while (rs.next()) {
    System.out.print("Coluna 1 retornada ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

31.3.1. Busca dos resultados com base em um cursor

Por padrão o driver traz todos os resultados da consulta de uma só vez. Esta forma pode não ser conveniente para conjuntos grandes de dados e, por isso, o driver JDBC fornece uma maneira de basear o ResultSet em um cursor do banco de dados, e somente trazer um pequeno número de linhas.

Um pequeno número de linhas é armazenado no lado cliente da conexão, e quando exauridas o próximo bloco de linhas é trazido reposicionando o cursor.

Exemplo 31-2. Definição do tamanho de busca para habilitar e desabilitar o cursor

Alterar o código para o modo cursor é tão simples quanto definir o tamanho de busca de Statement para o valor apropriado. Definir o tamanho de busca novamente como 0 faz com que todas as linhas seja trazidas (o comportamento padrão).

Statement st = db.createStatement();
// Habilitar o uso do cursor.
st.setFetchSize(50);
ResultSet rs = st.executeQuery("SELECT * FROM minha_tabela");
while (rs.next()) {
   System.out.print("uma linha foi retornada.");
}
rs.close();
// Desabilitar o uso do cursor.
st.setFetchSize(0);
ResultSet rs = st.executeQuery("SELECT * FROM minha_tabela");
while (rs.next()) {
   System.out.print("muitas linhas foram retornadas.");
}
rs.close();
// Fechar a declaração.
st.close();

31.3.2. Utilização da interface Statement ou PreparedStatement

As seguintes informações devem ser consideradas quando for utilizada a interface Statement ou PreparedStatement:

31.3.3. Utilização da interface ResultSet

As seguintes informações devem ser consideradas quando for utilizada a interface ResultSet:

SourceForge.net Logo