El Java Database Connectivity (JDBC ) Aplicación Programmer Interface ( API ) proporciona clases para la conexión y el acceso a los datos tabulares, incluyendo bases de datos relacionales. La clase ResultSet ofrece métodos para recuperar , navegar y manipular los resultados de la consulta de bases de datos . Ejemplo Ambiente
En los siguientes ejemplos , que se conecta a una base de datos llamada "Personal ", una sola tabla dentro de esa base de datos llamada "pueblo ", que contiene tres columnas : "'nombre ", " apellidos ", " título, "y " salario " . La tabla contiene los siguientes registros :
Bob , Smith , Secretaria , 23.50Ted , Anderson, diseñador , 38.00Fred , Johnson, programador , 32.25Alice , Anderson , Ingeniero, 46.75Bob , Clark , Pasante , 15.00Carol , Smith , Gerente, 42.50
consulta la base de datos
Crear una conexión de base de datos y crear un objeto de declaración llamando a la función createStatement de nuestro objeto Connection ().
< p > String url = " jdbc : mysql ://localhost /personal " ; Conexión conn = DriverManager.getConnection ( url , "username" , "password "); Declaración st = conn.createStatement ();
Crear una cadena de consulta que contiene una sentencia de consulta SQL
string query válido = " SELECT 'nombre , apellidos de las personas " ; .
Crear un objeto ResultSet utilizando el objeto Statement para ejecutar la consulta a la base de datos .
ResultSet rs = st.executeQuery (query) ;
el objeto ResultSet, rs , ahora contiene los resultados de la consulta: el "'nombre " y columnas " last_name " para cada registro de la tabla de " pueblo" .
Acceso a los resultados de la consulta
el objeto ResultSet tiene un cursor, que en un principio no apunta a ningún registro. Llame primero () la función de ResultSet para mover el cursor al primer registro en poder del objeto ResultSet. Funciones get del ResultSet proporciona acceso al contenido de cada columna con el nombre de columna de la tabla de base de datos. Usa getString (String ColumnLabel ) para recuperar el contenido de las columnas VARCHAR "'nombre " y " apellidos ".
Rs.first ( ) ; cadena fn = rs.getString ( "' nombre " ) ; cadena ln = rs . getString ( " apellidos "); System.out.println (ln + " ," + fn) ;
La última línea por encima de impresiones :
Smith , Bob
Llame last () la función de ResultSet para mover el cursor al último registro realizado por el objeto ResultSet
rs.last (); fn = rs.getString ( "'nombre '); ln = rs.getString ( " . 'nombre '); System.out.println (ln + " ," + fn) ;
La última línea anterior impresiones :
Smith , Carol
Stepping a través de los resultados de consulta
Normalmente, se desea acceder a todos los resultados devueltos por la consulta. Siguiente) La función de ResultSet ( mueve el cursor hacia adelante al siguiente registro . Cuando el cursor se mueve más allá del final del conjunto de resultados , el siguiente () función devuelve NULL, lo que permite utilizar el valor de retorno para escapar de un bucle while
Declaración st = conn.createStatement (). ; string query = "SELECT * FROM personas, donde los salarios > 30 " ; ResultSet rs = st.executeQuery (query) ;
while ( rs.next ()) {String fn = rs.getString ( "'nombre " ) cadena ln = rs.getString ( " apellidos "); System.out.println (fn + " " + ln) ;}
mientras que los pasos de bucle a través de cada registro del conjunto de resultados , y las impresiones : función anterior ()
Ted AndersonFred JohnsonAlice AndersonCarol Smith &
de ResultSet mueve el cursor hacia atrás un registro en el conjunto de resultados y devuelve NULL cuando el cursor se ha movido antes del primer registro . Esto le permite caminar hacia atrás a través del conjunto de resultados y utiliza el valor devuelto por la función anterior () para escapar de un bucle while. Continuando con el ejemplo anterior, el cursor se queda posicionado después del último registro del conjunto de resultados . Utilice la función anterior () caminar hacia atrás a través de los resultados de la consulta , la impresión del título y columnas de salario de cada registro. Utilice la función getFloat de ResultSet (String ColumnLabel ) para acceder al contenido de la columna FLOAT "salario ":
while ( rs.previous ()) {String t = rs.getString ( "title "); int w = rs.getFloat ( "salario "); System.out.println (fn + "$ " + ln) ;}
mientras que los pasos de bucle hacia atrás a través de cada registro del conjunto de resultados , y las impresiones :
Administrador 42.50Engineer $ $ $ 46.75Programmer 32.25Designer $ 38.00
Random navegación
ResultSet ofrece funciones para mover el cursor de forma arbitraria a través de los registros de un conjunto de resultados. Recuperar todos los registros contenidos en la tabla " personas " , según el " apellidos ", luego " columnas first_name ":
Declaración
st = conn.createStatement () , String query = "SELECT * FROM para personas de apellidos , 'nombre " ; ResultSet rs = st.executeQuery (query) ;
El conjunto de resultados contiene:
Alice , Anderson , Ingeniero, 46.75Ted , Anderson, diseñador , 38.00Bob , Clark, Intern , 15.00Fred , Johnson, programador , 32.25Bob , Smith , Secretaria , 23.50Carol , Smith , Gerente, 42.50
Utilice la función absoluta ( int fila ) para colocar el cursor en una fila específica en el conjunto de resultados. Un valor positivo para el parámetro fila se moverá el cursor hacia adelante desde antes del principio del conjunto de resultados . Un valor negativo para el parámetro de fila se moverá el cursor hacia atrás desde el final del conjunto de resultados :
rs.absolute ( 3 ) Cadena fn = rs.getString ( "'nombre '); Cadena ln = rs . getString ( " apellidos "); System.out.println (fn + " " + ln) ;
rs.absolute ( 5 ) cadena fn = rs.getString ( "'nombre '); cadena ln = rs . getString ( " apellidos "); System.out.println (fn + " " + ln) ;
rs.absolute ( -1 ) ; cadena fn = rs.getString ( "'nombre '); cadena ln = rs.getString ( " apellidos "); System.out.println (fn + " " + ln) ;
rs.absolute ( -3 ) ; cadena fn = rs.getString ( "'nombre '); cadena ln = rs.getString ( " apellidos "); System.out.println (fn + " " + ln) ;
Las declaraciones de impresión por encima de la salida :
Bob ClarkBob SmithCarol SmithFred Johnson
Continuando , el uso relativo ( int fila) para mover el cursor hacia atrás o hacia delante con respecto a la posición actual . El cursor se quedó posicionada en el cuarto disco del conjunto de resultados . Mueva hacia adelante dos filas y luego hacia atrás cuatro filas :
rs.relative ( 2 ), fn = rs.getString ( "'nombre '); ln = rs.getString ( " apellidos " ); System.out . println (fn + " " + ln) ;
rs.relative ( -4 ), fn = rs.getString ( "'nombre '); ln = rs.getString ( " apellidos "); System.out . println (fn + " " + ln) ;
las declaraciones de impresión en la salida el código de seguridad :
Carol SmithTed Anderson
Modificación de la Red Resultados
Modificar el contenido de un conjunto de resultados utilizando las funciones de actualización de ResultSet . Utilice updateString (String ColumnLabel , String x ) para cambiar todos los registros que coinciden con " Bob " en la columna "'nombre " a " Robert ". Utilice la función beforeFirst () para restablecer el cursor antes del comienzo del conjunto de resultados para que pueda caminar a través del conjunto de resultados actualizada e imprimir los nuevos valores :
String query = "SELECT * FROM personas " ; ResultSet rs = st.executeQuery (query) ;
while ( rs.next ()) {String fn = rs.getString ( "'nombre '); if ( fn.equals ( " Bob ") { rs.updateString ( "'nombre ", " Robert" ) ;} } rs.beforeFirst () , mientras que ( rs.next ()) {String fn = rs.getString ( "' nombre '); cadena ln = rs.getString ( " apellidos ") ; System.out.println (fn + " " + ln) ;}
Los siguientes resultados se imprimen :
Robert SmithTed AndersonFred JohnsonAlice AndersonRobert ClarkCarol Smith
Control de errores
Muchas de las funciones de ResultSet tiro un SQLException . Mejor práctica dicta errores generados deben ser capturados y manipulados . mensaje de SQLException puede ser muy útil en la depuración de errores de conexión y consulta. Contener la conexión y el código de consulta en try-catch bloques
try {String url = " jdbc : mysql ://localhost /personal " ; . Conexión conn = DriverManager.getConnection ( url , "username" , "password ") ; Declaración st = conex . createStatement ();
String query = " SELECT 'nombre , apellidos de las personas " ; ResultSet rs = st.executeQuery (query) ;
while ( rs.next ()) {String fn = rs.getString ( "'nombre '); cadena ln = rs.getString ( " apellidos "); System.out.println (fn +" "+ ln) ;} } catch ( SQLException ex) { System.err.println ( ex.getMessage ()) ;}
Clean Up