O Java Database Connectivity (JDBC ) Aplicação Programmer Interface ( API) fornece classes para conexão e acesso a dados tabulares , incluindo bancos de dados relacionais . A classe ResultSet fornece métodos para recuperar , navegação e manipulação de resultados de consulta de banco de dados . Exemplo Ambiente
Nos exemplos a seguir , você vai se conectar a um banco de dados chamado " pessoal ", uma única tabela dentro desse banco de dados chamado "povo" , contendo três colunas: " primeiro_nome ", " last_name " " , título, "e" salário ". Sua tabela contém os seguintes registros :
Bob , Smith , Clerk , 23.50Ted , Anderson, Designer , 38.00Fred , Johnson, Programador, 32.25Alice , Anderson , Engenheiro, 46.75Bob , Clark, Intern , 15.00Carol , Smith , Gerente, 42,50
consultar o banco de
criar uma conexão de banco de dados e criar um objeto Statement chamando createStatement do nosso objeto de conexão () função.
string url = " jdbc: mysql ://localhost /pessoal "; Connection conn = DriverManager.getConnection (url, "username" , "password" ); Declaração st = conn.createStatement ();
Criar uma string de consulta que contém uma instrução de consulta SQL válida
consulta string = "SELECT first_name , last_name de pessoas "; .
Crie um objeto ResultSet usando o objeto Statement para executar a consulta ao banco de dados .
ResultSet rs = st.executeQuery (query) ;
o objeto ResultSet , rs , agora contém os resultados da consulta : o " primeiro_nome " e colunas " last_name " para cada registro em tabela " pessoas " .
Acessando Resultados da Consulta
o objeto ResultSet tem um cursor , que inicialmente não aponta para qualquer registro. Chame a função de primeiro ResultSet () para mover o cursor para o primeiro registro realizado pelo objeto ResultSet. Funções get do ResultSet fornecer acesso ao conteúdo de cada coluna usando o nome da coluna da tabela do banco de dados. . " Last_name " Usar getString (String columnLabel ) para recuperar o conteúdo do VARCHAR colunas " prenome " e
rs.first (); seqüência fn = rs.getString ( " prenome "); Cordas ln = rs . getString ( " last_name "); System.out.println (ln + "," + fn );
A última linha acima impressões :
Smith, Bob
Chame última função do ResultSet () para mover o cursor para o último registro realizado pelo objeto ResultSet
rs.last (); . fn = rs.getString ( " prenome "); ln = rs.getString ( " last_name "); System.out.println (ln +", " + fn );
A última linha acima impressões :
Smith , Carol
Stepping através dos resultados da consulta
Normalmente, você deseja acessar todos os resultados retornados pela consulta. Próxima função do ResultSet ( ) move o cursor para a frente para o próximo registro. Quando o cursor é movido após o final do conjunto de resultados , a função next () retorna NULL, permitindo que você use o valor de retorno para escapar de um loop while
Statement st = conn.createStatement (). ; query string = "SELECT * FROM pessoas onde salário > 30 "; ResultSet rs = st.executeQuery (query) ;
while ( rs.next ()) {String fn = rs.getString ( " prenome " ); Cordas ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln );}
os passos loop while através de cada registro no conjunto de resultados e impressões :
função anterior Ted AndersonFred JohnsonAlice AndersonCarol Smith
do ResultSet () move o cursor para trás um registro no conjunto de resultados e retorna NULL quando o cursor se moveu antes do primeiro registro . Isso permite que você ande para trás através do conjunto de resultados e use o valor de retorno da função anterior () para escapar de um loop while. Continuando o exemplo acima , o cursor foi deixado posicionado após o último registro no conjunto de resultados. Use a função anterior () andar para trás através dos resultados da consulta, a impressão do título e colunas de salários de cada registro. Use a função de ResultSet getFloat (String columnLabel ) para acessar o conteúdo da coluna FLOAT "salário " :
while ( rs.previous ()) {String t = rs.getString ( "title" ); int w = rs.getFloat ( "salário "); System.out.println (fn + "$" + ln );}
os passos loop while para trás através de cada registro no conjunto de resultados e impressões :
Gerente $ 42.50Engineer $ 46.75Programmer $ 32.25Designer $ 38,00
Random Access Navigation
ResultSet oferece funções para mover o cursor de forma arbitrária através dos registros em um conjunto de resultados. Recuperar todos os registros contidos pela tabela " pessoas " , classificado pela " last_name " depois " primeiro_nome " colunas :
Declaração st = conn.createStatement (); consulta String = "SELECT * FROM ordem pessoas por last_name , prenome "; ResultSet rs = st.executeQuery (query) ;
O conjunto de resultados contém :
Alice , Anderson , Engenheiro, 46.75Ted , Anderson, Designer , 38.00Bob , Clark, Intern , 15.00Fred , Johnson, programador, 32.25Bob , Smith, Clerk , 23.50Carol , Smith , Gerente, 42,50
Use a função absoluta (int linha) para definir o cursor para uma linha específica no conjunto de resultados . Um valor positivo para o parâmetro de linha irá mover o cursor para a frente de antes do início do conjunto de resultados. Um valor negativo para o parâmetro de linha irá mover o cursor para trás a partir do final do conjunto de resultados :
rs.absolute (3); seqüência fn = rs.getString ( " prenome "); corda ln = rs . getString ( " last_name "); System.out.println (fn + "" + ln );
rs.absolute (5); seqüência fn = rs.getString ( " prenome "); Cordas ln = rs . getString ( " last_name "); System.out.println (fn + "" + ln );
rs.absolute (-1) ; seqüência fn = rs.getString ( " prenome "); Cordas ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln );
rs.absolute ( -3) ; seqüência fn = rs.getString ( " prenome "); Cordas ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln );
As instruções de impressão acima de saída :
Bob ClarkBob SmithCarol SmithFred Johnson
Continuada , use relativa ( int linha) para mover o cursor para trás ou para a frente em relação à posição atual. O cursor foi deixado posicionado no quarto disco do conjunto de resultados . Mova-o para a frente duas fileiras, depois para trás quatro linhas :
rs.relative (2); fn = rs.getString ( " prenome "); ln = rs.getString ( " last_name "); System.out . println (fn + "" + ln );
rs.relative ( -4 ); fn = rs.getString ( " prenome "); ln = rs.getString ( " last_name "); System.out . println (fn + "" + ln );
as demonstrações de impressão na saída do código acima :
Carol SmithTed Anderson
Modificando os resultados
modificar o conteúdo de um conjunto de resultados usando as funções de atualização da ResultSet . Use updateString (String columnLabel , String x ) para alterar todos os registros correspondentes "Bob" na coluna " prenome " para " Robert ". Use a função beforeFirst () para redefinir o cursor para antes do início do conjunto de resultados para que você possa percorrer o resultado atualizada definir e imprimir os novos valores :
consulta String = "SELECT * FROM pessoas "; ResultSet rs = st.executeQuery (query) ;
while ( rs.next ()) {String fn = rs.getString ( " prenome "); if ( fn.equals ( "Bob" ) { rs.updateString ( " prenome ", " Robert" );}} rs.beforeFirst (); while ( rs.next ()) {String fn = rs.getString ( " prenome "); Cordas ln = rs.getString ( " last_name " ) ; System.out.println (fn + "" + ln );}
Os seguintes resultados são impressos :
Robert SmithTed AndersonFred JohnsonAlice AndersonRobert ClarkCarol Smith
Manipulando erros
Muitas das funções do ResultSet lançar uma SQLException . melhor prática dita erros lançados devem ser capturados e manipulados. mensagem de SQLException podem ser muito úteis na depuração de erros de conexão e consulta. Conter a sua conexão e código de consulta em blocos try-catch
try { string url = " jdbc: mysql ://localhost /pessoal "; . Connection conn = DriverManager.getConnection (url, "username" , "password" ); Declaração st = conn . createStatement ();
seqüência query = "SELECT first_name , last_name de pessoas "; ResultSet rs = st.executeQuery (query) ;
while ( rs.next ()) { fn Cordas = rs.getString ( " prenome "); Cordas ln = rs.getString ( " last_name "); System.out.println (fn + "" + ln );}} catch ( SQLException ex) { System.out.println ( ex.getMessage ()); . }
Clean Up
um objeto ResultSet é fechada automaticamente quando o objeto Statement usado para criá-la está perto quando fechado, um ResultSet objeto irá liberar automaticamente os recursos Forçar um objeto ResultSet para liberar todo o JDBC e recursos de banco de dados que manter chamando o próximo function () Feche o objeto ResultSet , rs , a partir dos exemplos acima : . .
rs.close ( );