English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Conjuntos de resultados (ResultSet) JDBC

Las sentencias SQL que leen datos de la consulta de base de datos devuelven los datos del conjunto de resultados. La sentencia SELECT es el método estándar para seleccionar filas de la base de datos y verlas en el conjunto de resultados. El interfaz Sql.ResultSet representa el conjunto de resultados de la consulta de base de datos.

El objeto ResultSet mantiene un cursor apuntando a la fila actual del conjunto de resultados. El término "conjunto de resultados (result set)" se refiere a las filas y columnas de datos que contiene el objeto ResultSet.

Los métodos del interfaz ResultSet se pueden dividir en tres categorías-

  • Métodos de navegación: Se utiliza para mover el cursor a la izquierda y a la derecha.

  • Método Get: Se utiliza para ver los datos de las columnas de la fila actual apuntada por el cursor.

  • Método Update:Se utiliza para actualizar los datos de cada columna de la fila actual. Luego, la actualización también se puede realizar en la base de datos base.

El cursor puede moverse según las propiedades del ResultSet. Estas propiedades se especifican al crear el Statement correspondiente que genera el ResultSet.

JDBC proporciona los siguientes métodos de conexión para crear sentencias con el ResultSet requerido-

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

El primer parámetro representa el tipo del objeto ResultSet, el segundo parámetro es una de las constantes ResultSet, que se utiliza para especificar si el conjunto de resultados es de solo lectura o actualizable.

Tipo de conjunto de resultados

Los posibles RSType se muestran a continuación. Si no especifica ningún tipo de ResultSet, obtendrá automáticamente un conjunto de resultados de tipo TYPE_FORWARD_ONLY.

TipoDescripción
ResultSet.TYPE_FORWARD_ONLY

El cursor solo puede moverse hacia adelante en el conjunto de resultados.

ResultSet.TYPE_SCROLL_INSENSITIVE

El cursor puede desplazarse hacia adelante y hacia atrás, y el conjunto de resultados no es sensible a los cambios realizados en la base de datos por otras personas después de crear el conjunto de resultados.

ResultSet.TYPE_SCROLL_SENSITIVE.

El cursor puede desplazarse hacia adelante y hacia atrás, y el conjunto de resultados es muy sensible a los cambios realizados por otros en la base de datos después de crear el conjunto de resultados.

Concurrencia de ResultSet

Las posibles RSConcurrency se indican a continuación. Si no especifica ningún tipo de concurrencia, se obtendrá automáticamente el tipo CONCUR_READ_ONLY.

ConcurrenciaDescripción
ResultSet.CONCUR_READ_ONLY

Crear un conjunto de resultados de solo lectura. Este es el valor predeterminado

ResultSet.CONCUR_UPDATABLE

Crear un conjunto de resultados actualizable.

Hasta ahora, todos los ejemplos que hemos escrito se pueden escribir así, este ejemplo inicializa un objeto Statement para crear un objeto ResultSet de solo lectura-

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

Navegación del conjunto de resultados

El interfaz ResultSet tiene varios métodos que involucran el movimiento del cursor, incluyendo-

NúmeroMétodos y descripciones
1public void beforeFirst() throws SQLException

Mueve el cursor antes de la primera línea.

2public void afterLast() throws SQLException

Mueve el cursor después de la última línea.

3public boolean first() throws SQLException

Mueve el cursor a la primera línea.

4public void last() throws SQLException

Mueve el cursor a la última línea.

5public boolean absolute(int row) throws SQLException

Mueve el cursor a la línea especificada.

6public boolean relative(int row) throws SQLException

Mueve el cursor hacia adelante o hacia atrás por el número de filas especificado, desde su posición actual.

7public boolean previous() throws SQLException

Mueve el cursor a la línea anterior. Si la línea anterior no está en el conjunto de resultados, este método devuelve false.

8public boolean next() throws SQLException

Mueve el cursor a la siguiente fila. Si no hay más filas en el conjunto de resultados, este método devuelve false.

9public int getRow() throws SQLException

Devuelve el número de fila al que apunta el cursor.

10public void moveToInsertRow() throws SQLException

Mueve el cursor a una fila especial en el conjunto de resultados, que se puede usar para insertar una nueva fila en la base de datos. Recuerde la posición actual del cursor.

11public void moveToCurrentRow() throws SQLException

Si el cursor actual está en la fila de inserción, el cursor se mueve a la fila actual; de lo contrario, este método no realiza ninguna acción

Para entender mejor, estudie lo siguiente:Navegación-Código de ejemplo.

Ver el conjunto de resultados

La interfaz ResultSet contiene muchos métodos para obtener los datos de la fila actual.

Cada tipo de datos posible tiene un método get, y cada método get tiene dos versiones-

  • Columna con nombre de columna

  • Índice con índice de columna

Por ejemplo, si el columna de interés contiene un entero,则需要使用 ResultSet 的 getInt ()方法之一

NúmeroMétodos y descripciones
1public int getInt(String columnName) throws SQLException

Devuelve el entero en la columna con el nombre columnName de la fila actual.

2public int getInt(int columnIndex) throws SQLException

Devuelve el número entero en la columna de índice especificada de la fila actual. El índice de columna comienza desde1Comenzando, lo que significa que la primera columna de la fila es1Y la segunda columna de la fila es2Y así sucesivamente.

Del mismo modo, en la interfaz ResultSet, para cada uno de los ocho tipos de datos básicos de Java y los tipos comunes (como java.lang.String, java.lang.Object y java.net.URL), hay métodos get.

También hay métodos para obtener tipos de datos SQL java.sql.Date, java.sql.Time, java.sql.Timestamp, java.sql.Clob y java.sql.Blob. Consulte el documento para obtener más información sobre el uso de estos tipos de datos SQL.

Para entender mejor, estudiemosVer-Ejemplo de código.

Actualizar el conjunto de resultados

La interfaz ResultSet contiene una colección de métodos de actualización para actualizar los datos del conjunto de resultados

Al igual que con el método get, cada tipo de datos tiene dos métodos de actualización-

  • Columna con nombre de columna

  • Índice con índice de columna

Por ejemplo, para actualizar la columna String de la fila actual del conjunto de resultados, se puede usar uno de los métodos updateString() siguientes-

NúmeroMétodos y descripciones
1public void updateString(int columnIndex, String s) throws SQLException

Cambiar el valor de la columna String especificada a s.

2public void updateString(String columnName, String s) throws SQLException

Similar a los métodos anteriores, pero las columnas se especifican por nombre en lugar de por índice.

El paquete java.sql contiene ocho tipos de datos originales y métodos de actualización para String, Object, URL y tipos de datos SQL.

Actualizar una fila en el conjunto de resultados cambiará las columnas de la fila actual del objeto ResultSet, pero no la fila base de datos. Para actualizar los cambios en la fila de la base de datos, debe llamar a uno de los siguientes métodos.

NúmeroMétodos y descripciones
1public void updateRow()

Actualizar la fila actual actualizando la fila correspondiente en la base de datos.

2public void deleteRow()

Eliminar la fila actual de la base de datos.

3public void refreshRow()

Refrescar los datos del conjunto de resultados para reflejar cualquier cambio reciente en la base de datos.

4public void cancelRowUpdates()

Cancelar cualquier actualización realizada en la fila actual.

5public void insertRow()

Insertar una fila en la base de datos. Solamente se puede llamar a este método cuando el cursor apunta a la fila de inserción.

Para entender mejor, estudie lo siguiente:Actualizar código de ejemplo.