Exemplo de ResultSet em JDBC

Escrito por deborah lee soltesz Google | Traduzido por josé fabián
  • Compartilhar
  • Tweetar
  • Compartilhar
  • Pin
  • E-mail
Exemplo de ResultSet em JDBC
Use a classe ResultSet para ler e alterar os conteúdos do seu banco de dados (Programming Code Source Background Texture Illustration Design image by Bob Davies from Fotolia.com)

A Interface de Programação de Aplicativos (API) do Java Database Connectivity (JDBC) oferece classes para acessar dados tabulares, incluindo bancos de dados relacionais. A classe ResultSet fornece métodos para recuperar, navegar e manipular resultados de uma consulta a um banco de dados.

Outras pessoas estão lendo

Ambiente de exemplo

Nos seguintes exemplos você se conectará a um banco de dados chamado "pessoal" e dentro dele, a uma tabela chamada "pessoas", a qual contém três colunas: "nome", "sobrenome", "titulo" e "salario". Sua tabela contém os seguintes registros:

Bob, Smith, Funcionário, 23.50 Ted, Anderson, Desenhista, 38.00 Fred, Johnson, Programador, 32.25 Alice, Anderson, Engenheiro, 46.75 Bob, Clark, Assistente, 15.00 Carol, Smith, Gerente, 42.50

Consulte o banco de dados

Crie uma conexão (Connection) ao banco de dados e um objeto Statement chamando a função createStatement() da Connection:

String url = "jdbc:mysql://localhost/pessoal" GO Connection conn = DriverManager.getConnection(url, "usuario", "senha") GO Statement st = conn.createStatement() GO

Crie uma consulta contendo uma sentença SQL válida.

String query = "SELECT nome, sobrenome FROM pessoas" GO

Crie um objeto ResultSet usando o objeto Statement para executar a consulta na base de dados.

ResultSet rs = st.executeQuery(query) GO

O objeto ResultSet "rs" contém agora os resultados da consulta: as colunas "nome" e "sobrenome" de todos os registros da tabela "pessoas".

Acessar os resultados da consulta

O objeto ResultSet possui um cursor que inicialmente não aponta para nenhum registro. Chame a função first() do ResultSet para mover o cursor para o primeiro registro contido no conjunto. As funções "get" fornecem acesso aos conteúdos de cada coluna usando o nome da coluna da tabela. Use getString(String nomeColuna) para recuperar os conteúdos das colunas VARCHAR "nome" e "sobrenome"

rs.first() GO String n = rs.getString("nome") GO String sn = rs.getString("sobrenome") GO System.out.println(sn + ", " + n) GO

A última linha mostrará:

Smith, Bob

Chame à função last() do ResultSet para mover o cursor para o último registro do conjunto.

rs.last() GO n = rs.getString("nome") GO sn = rs.getString ("sobrenome") GO System.out.println(sn + ", " + n) GO

A última linha mostrará:

Smith, Carol

Passando pelos resultados da consulta

Normalmente você usará todos os resultados de uma consulta. A função next() do ResultSet move o cursor para o registro seguinte. Quando o cursor vai além do final dos resultados, a função next() devolve NULL e você pode usar este resultado para sair de um laço while.

Statement st = conn.createStatement() GO String query = "SELECT * FROM pessoas WHERE salario > 30" GO ResultSet rs = st.executeQuery(query) GO

while (rs.next()) { String n = rs.getString("nome") GO String sn = rs.getString ("sobrenome") GO System.out.println(n + " " + sn) GO }

O laço while percorrerá cada registro do conjunto de resultados e imprimirá:

Bob Smith Ted Anderson Fred Johnson Alice Anderson Bob Clark Carol Smith

A função previous() move o cursor para o registro anterior e devolve NULL quando o cursor vai além do primeiro registro. Isto permite que você percorra o conjunto de resultados em sentido contrário e use o valor de retorno de previous() para sair de um laço while. Seguindo o exemplo acima, o cursor foi colocado além do último registro. Use previous() para mover-se para trás nos resultados da consulta, imprimindo as colunas "titulo" e "salario" de cada registro. Use a função getFloat(String nomeColuna) para acessar o conteúdo da coluna "salario" em formato FLOAT:

while (rs.previous()) { String t = rs.getString("title") GO int w = rs.getFloat("wage") GO System.out.println(t + " $" + w) GO }

O laço while mostra o seguinte:

Gerente, 42.50 Engenheiro, 46.75 Programador, 32.25 Desenhista, 38.00

Navegação de acesso aleatório

ResultSet fornece funções para mover o cursor arbitrariamente pelos registros do conjunto de resultados. Recupere todos os registros contidos na tabela "pessoas", ordenados primeiro pela coluna "sobrenome" e depois pela coluna "nome":

Statement st = conn.createStatement() GO String query = "SELECT * FROM pessoas ORDER BY sobrenome, nome" GO ResultSet rs = st.executeQuery(query) GO

O conjunto resultante contém:

Alice, Anderson, Engenheiro, 46.75 Ted, Anderson, Desenhista, 38.00 Bob, Clark, Assistente, 15.00 Fred, Johnson, Programador, 32.25 Bob, Smith, Vendedor, 23.50 Carol, Smith, Gerente, 42.50

Use a função absolute (int fila) para colocar o cursor em uma fila específica do conjunto de resultados. Um valor positivo para o valor "fila" moverá o cursor para a frente desde o começo do conjunto de resultados, e um valor negativo o moverá para trás desde o final;

rs.absolute (3) GO String n = rs.getString("nome") GO String sn = rs.getString ("sobrenome") GO System.out.println(n + " " + sn) GO

rs.absolute (5) GO String fn = rs.getString("nome") GO String ln = rs.getString("sobrenome") GO System.out.println(n + " " + sn) GO

rs.absolute (-1) GO String n = rs.getString("nome") GO String sn = rs.getString("sobrenome") GO System.out.println(n + " " + sn) GO

rs.absolute (-3) GO String n = rs.getString("nome") GO String sn = rs.getString ("sobrenome") GO System.out.println(n + \" \" + sn) GO

As sentenças acima mostram o seguinte:

Bob Clark Bob Smith Carol Smith Fred Johnson

Além disso, você pode usar a função relative(int fila) para mover o cursor para trás ou para a frente em forma relativa à posição atual. O cursor ficou posicionado no quarto registro do conjunto de resultados. Mova-o duas filas para a frente e depois quatro para trás:

rs.relative(2) GO n = rs.getString("nome") GO sn = rs.getString ("sobrenome") GO System.out.println(n + " " + sn) GO

rs.relative(-4) GO n = rs.getString("nome") GO sn = rs.getString("sobrenome") GO System.out.println(n + " " + sn) GO

As sentenças do código acima mostram o seguinte: Carol Smith Ted Anderson

Alterar os resultados

Altere os conteúdos de um conjunto de resultados usando as funções "update". Use updateString(String nomeColuna, String x) para alterar todos os registros cujos nomes contenham "Bob" na coluna "nome" para "Robert". Use a função beforeFirst() para reinicializar a posição do cursor para antes do início do conjunto de resultados, mover-se pelos dados atualizados e mostrar os novos valores:

String query = "SELECT * FROM pessoas" GO ResultSet rs = st.executeQuery(query)go

while (rs.next()) { String fn = rs.getString("nome") GO if (fn.equals(“Bob”) { rs.updateString(“nome”, “Robert”) GO } } rs.beforeFirst(); while (rs.next()) { String n = rs.getString("nome") GO String sn = rs.getString ("sobrenome") GO System.out.println(n + " " + sn) GO }

Os seguintes resultados serão mostrados:

Robert Smith Ted Anderson Fred Johnson Alice Anderson Robert Clark Carol Smith

Lidar com erros

Muitas das funções do ResultSet lançam uma SQLException. O correto a fazer com os erros lançados é capturá-los e tratá-los. A mensagem da SQLException pode ser muito útil para tratar problemas com conexões e consultas. Coloque seu código de conexão e de requisição em blocos try-catch.

try { String url = "jdbc:mysql://localhost/staff" GO Connection conn = DriverManager.getConnection(url, "usuario", "senha") GO Statement st = conn.createStatement() GO

String query = "SELECT nome, sobrenome FROM pessoas" GO ResultSet rs = st.executeQuery(query) GO

while (rs.next()) { String n = rs.getString("nome") GO String sn = rs.getString ("sobrenome") GO System.out.println(n + " " + sn) GO } } catch (SQLException ex) { System.err.println(ex.getMessage()) GO }

Limpeza

Um objeto ResultSet é fechado automaticamente quando o objeto Statement usado para criá-lo é fechado. Ao fechar um objeto ResultSet, os recursos são liberados. Force o objeto ResultSet a liberar todos os recursos de JDBC e base de dados por meio da função close(). Feche o objeto ResultSet "rs" dos exemplos acima da seguinte forma:

rs.close();

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível