Tecnología

Inicio

Ejemplo conjunto de resultados JDBC

El Java Database Connectivity (JDBC) Programador de Aplicaciones (API) proporciona clases para conectarse y acceder a los datos tabulares, incluyendo bases de datos relacionales. La clase ResultSet proporciona métodos para recuperar, la navegación, y la manipulación de resultados de la consulta de base de datos.

Ejemplo Medio Ambiente

En los siguientes ejemplos, que se conectará a una base de datos llamada "personal", una sola tabla dentro de esa base de datos llamada "gente" que contiene tres columnas: ". Salarial" "nombre apellido", "apellidos", "título", y la tabla contiene los siguientes registros:

Bob, Smith, secretario, 23.50
Ted, Anderson, diseñador, 38.00
Fred, Johnson, programador, 32.25
Alice, Anderson, Ingeniero, 46.75
Bob, Clark, Pasante, 15.00
Carol, Smith, Gerente, 42.50

Consultar la base de datos

Crear una conexión de base de datos y crear un objeto Statement llamando a la función de nuestro objeto Connection createStatement ().

Cadena URL = \ "jdbc: mysql: // localhost / personal \"
IR
Conexión conn = DriverManager.getConnection (URL, \ "nombre de usuario \", \ "password \")
IR
Declaración st = conn.createStatement ()
IR

Crear una cadena de consulta que contiene una sentencia de consulta SQL válida.

String query = \ "SELECT nombre, apellido de la gente \"
IR

Crear un objeto ResultSet utilizando el objeto Statement para ejecutar la consulta a la base de datos.

ResultSet rs = st.executeQuery (consulta)
IR

El objeto ResultSet, rs, que ahora contiene los resultados de la consulta: el "nombre apellido" y "columnas" last_name para cada registro en la tabla de "la gente".

El acceso a los resultados de la consulta

El objeto ResultSet tiene un cursor, que en un principio no apunta a ningún registro. Llame a la función del conjunto de resultados primero () para mover el cursor al primer registro en poder del objeto ResultSet. Las funciones GET de ResultSet proporcionan acceso a los contenidos de cada columna utilizando el nombre de columna de la tabla de base de datos. Utilice getString (String etiquetaColumna) para recuperar el contenido de la VARCHAR columnas "nombre apellido" y "apellidos".

rs.first ()
IR
Cadena fn = rs.getString (\ "nombre apellido \")
IR
Cadena ln = rs.getString (\ "apellidos \")
IR
System.out.println (ln + \ ", \" + fn)
IR

La última línea por encima de las impresiones:

Smith, Bob

Llame a la función última del conjunto de resultados () para mover el cursor al último registro en poder del objeto ResultSet.

rs.last ()
IR
fn = rs.getString (\ "nombre apellido \")
IR
ln = rs.getString (\ "apellidos \")
IR
System.out.println (ln + \ ", \" + fn)
IR

La última línea por encima de las impresiones:

Smith, Carol

Pasando a través de los resultados de la consulta

Por lo general, se desea acceder a todos los resultados devueltos por la consulta. siguiente 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, la siguiente función () devuelve NULL, lo que permite utilizar el valor de retorno para escapar de un bucle while.

Declaración st = conn.createStatement ()
IR
String query = \ "SELECT * FROM personas, donde los salarios> 30 \"
IR
ResultSet rs = st.executeQuery (consulta)
IR

mientras que (rs.next ()) {

String fn = rs.getString(\"first_name\")

IR

String ln = rs.getString (\"last_name\")

IR

System.out.println(fn + \" \" + ln)

IR
}

Los pasos de bucle, mientras que a través de cada registro en el conjunto de resultados, y las impresiones:

Ted Anderson
Fred Johnson
Alice Anderson
Carol Smith

función anterior del conjunto de resultados () mueve el cursor hacia atrás un registro en el conjunto de resultados, y devuelve un valor nulo 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 de retorno de la función anterior () para escapar de un bucle while. Continuando con el ejemplo anterior, el cursor se dejó colocado después del último registro en el conjunto de resultados. Utilice la función anterior a pie () hacia atrás a través de los resultados de la consulta, la impresión de las columnas de títulos y de los salarios de cada registro. Utilice la función getFloat del conjunto de resultados (String etiquetaColumna) para acceder al contenido de la columna FLOAT "salario":

mientras que (rs.previous ()) {

String t = rs.getString(\"title\")

IR

int w = rs.getFloat(\"wage\")

IR

System.out.println(fn + \" $\" + ln)

IR
}

El bucle while pasos hacia atrás por cada registro en el conjunto de resultados, y las impresiones:

Administrador de $ 42.50
Ingeniero $ 46.75
Programador $ 32.25
Diseñador $ 38.00

Navegación de acceso aleatorio

ResultSet ofrece funciones para mover el cursor de forma arbitraria a través de los registros en un conjunto de resultados. Recuperar todos los registros contenidos en la tabla de "la gente", clasificado según las columnas "last_name" y luego "first_name":

Declaración st = conn.createStatement ()
IR
String query = \ "SELECT * FROM para la gente por apellidos y, FIRST_NAME \"
IR
ResultSet rs = st.executeQuery (consulta)
IR

El conjunto de resultados contiene:

Alice, Anderson, Ingeniero, 46.75
Ted, Anderson, diseñador, 38.00
Bob, Clark, Pasante, 15.00
Fred, Johnson, programador, 32.25
Bob, Smith, secretario, 23.50
Carol, 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 mueva el cursor hacia adelante desde antes del principio del conjunto de resultados. Un valor negativo para el parámetro fila se moverá el cursor hacia atrás desde el extremo del conjunto de resultados:

rs.absolute (3)
IR
Cadena fn = rs.getString (\ "nombre apellido \")
IR
Cadena ln = rs.getString (\ "apellidos \")
IR
System.out.println (fn + \ "\" + ln)
IR

rs.absolute (5)
IR
Cadena fn = rs.getString (\ "nombre apellido \")
IR
Cadena ln = rs.getString (\ "apellidos \")
IR
System.out.println (fn + \ "\" + ln)
IR

rs.absolute (-1)
IR
Cadena fn = rs.getString (\ "nombre apellido \")
IR
Cadena ln = rs.getString (\ "apellidos \")
IR
System.out.println (fn + \ "\" + ln)
IR

rs.absolute (-3)
IR
Cadena fn = rs.getString (\ "nombre apellido \")
IR
Cadena ln = rs.getString (\ "apellidos \")
IR
System.out.println (fn + \ "\" + ln)
IR

Las declaraciones de impresión por encima de la salida:

Bob Clark
Bob Smith
Carol Smith
Fred Johnson

Continuando, el uso relativo (fila int) para mover el cursor hacia atrás o hacia adelante con relación a la posición actual. El cursor se quedó posicionado en el cuarto disco del conjunto de resultados. Moverlo hacia adelante dos filas, luego hacia atrás cuatro filas:

rs.relative (2)
IR
fn = rs.getString (\ "nombre apellido \")
IR
ln = rs.getString (\ "apellidos \")
IR
System.out.println (fn + \ "\" + ln)
IR

rs.relative (-4)
IR
fn = rs.getString (\ "nombre apellido \")
IR
ln = rs.getString (\ "apellidos \")
IR
System.out.println (fn + \ "\" + ln)
IR

Las declaraciones de impresión en la salida el código de seguridad:

Carol Smith
Ted Anderson

La modificación de los resultados

Modificar el contenido de un conjunto de resultados utilizando las funciones de actualización del conjunto de resultados. Utilice updateString (String etiquetaColumna, cadena x) para cambiar todos los registros que coinciden con "Bob" en la columna "nombre apellido" a "Robert". Utilice la función beforeFirst () para restablecer el cursor antes del inicio 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 \"
IR
ResultSet rs = st.executeQuery (consulta)
IR

mientras que (rs.next ()) {

String fn = rs.getString(\"first_name\")

IR

if (fn.equals(“Bob”) {
rs.updateString(“first_name”, “Robert”)

IR

}

}
rs.beforeFirst ();
mientras que (rs.next ()) {

String fn = rs.getString(\"first_name\")

IR

String ln = rs.getString (\"last_name\")

IR

System.out.println(fn + \" \" + ln)

IR
}

Los siguientes resultados se imprimen:

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

Gestión de errores

Muchas de las funciones de ResultSet lanzar una excepción de SQL. Mejores prácticas dictados errores generados deben ser capturados y manipulados. El mensaje de excepción de SQL puede ser muy útil en la depuración de errores de conexión y de consulta. Contener su conexión y el código de consulta en bloques try-catch.

tratar {

String URL = \"jdbc:mysql://localhost/staff\"

IR

Connection conn = DriverManager.getConnection(URL, \"username\", \"password\")

IR

Statement st = conn.createStatement()

IR

String query = \"SELECT first_name, last_name FROM people\"

IR

ResultSet rs = st.executeQuery(query)

IR

while (rs.next()) {
String fn = rs.getString(\"first_name\")

IR

String ln = rs.getString (\"last_name\")

IR

System.out.println(fn + \" \" + ln)

IR

}

}
captura (SQLException ex) {

System.err.println(ex.getMessage())

IR
}

Limpiar

Un objeto ResultSet se cierra automáticamente cuando el objeto Statement utiliza para crear que está cerca. Cuando está cerrado, un objeto ResultSet se liberará automáticamente los recursos. Forzar un objeto ResultSet para liberar toda la base de datos JDBC y recursos que mantenga llamando a la función close (). Cerrar el objeto ResultSet, rs, a partir de los ejemplos anteriores:

rs.close ();