jdbc resultset how use java resultset retrieve data
Este tutorial explica cómo utilizar JDBC ResultSet para recuperar datos. También aprenderemos sobre las interfaces ResultSetMetaData y DatabaseMetaData con ejemplos:
En el DriverManager JDBC tutorial de la Serie de tutoriales de JDBC , aprendimos cómo usar JDBC DriverManager y sus métodos, JDBC PreparedStatement en aplicaciones Java.
En este tutorial, discutiremos las interfaces restantes en JDBC. Hemos cubierto las interfaces Statement, PreparedStatement y CallableStatement en nuestros tutoriales anteriores.
Aquí, aprenderemos sobre las interfaces JDBC ResultSet, ResultSetMetaData y DatabaseMetaData, sus métodos y cómo usar los métodos en el programa Java.
Lo que vas a aprender:
Interfaz ResultSet de JDBC
La interfaz ResultSet está presente en el paquete java.sql. Se utiliza para almacenar los datos que se devuelven desde la tabla de la base de datos después de la ejecución de las sentencias SQL en el Programa Java. El objeto de ResultSet mantiene el cursor en los datos del resultado. De forma predeterminada, el cursor se coloca antes de la primera fila de los datos del resultado.
El método next () se usa para mover el cursor a la siguiente posición en una dirección hacia adelante. Devolverá FALSE si no hay más registros. Recupera datos llamando al método executeQuery () utilizando cualquiera de los objetos de declaración. Puede ser un objeto Statement o PreparedStatement o CallableStatement. Las interfaces PreparedStatement y CallableStatement son las subinterfaces de la interfaz Statement.
Interfaz de declaración
|_+_|Interfaz PreparedStatement
|_+_|Podemos usar el método getX () para obtener los datos de las columnas mientras iteramos a través de los resultados donde X - es el tipo de datos de la columna. Podemos usar Nombres de columna o Índice para obtener los valores usando métodos getX ().
|_+_|También podemos mencionar el número de índice de la columna en lugar del nombre de la columna en los métodos getX ().
|_+_|Tipos de conjuntos de resultados
De forma predeterminada, podemos iterar los datos / valores en ResultSet que han regresado como una salida de la declaración SQL ejecutada en la dirección de avance. Podemos iterar los valores en otras direcciones usando Scrollable ResultSet. Podemos especificar el tipo y la simultaneidad de ResultSet al crear objetos Statement, PreparedStatement y CallableStatement.
Hay 3 tipos en ResultSet. Son:
- TYPE_FORWARD_ONLY: Es la opción predeterminada, donde el cursor se mueve de principio a fin, es decir, en la dirección de avance.
- TYPE_SCROLL_INSENSITIVE: En este tipo, hará que el cursor se mueva tanto hacia adelante como hacia atrás. Si realizamos cambios en los datos mientras iteramos los datos almacenados, no se actualizará en el conjunto de datos si alguien cambia los datos en la base de datos. Porque el conjunto de datos tiene los datos desde el momento en que la consulta SQL devuelve los datos.
- TYPE_SCROLL_SENSITIVE: Es similar a TYPE_SCROLL_INSENSITIVE, la diferencia es si alguien actualiza los datos después de que la Consulta SQL los ha devuelto, mientras que la iteración reflejará los cambios en el conjunto de datos.
Concurrencia de ResultSet
Hay 2 modos de simultaneidad en ResultSet. Son:
- ResultSet.CONCUR_READ_ONLY: Es el modo de concurrencia predeterminado. Solo podemos leer los datos en el ResultSet. La actualización no es aplicable.
- ResultSet.CONCUR_UPDATABLE: Podemos actualizar los datos en el objeto ResultSet.
Algunas bases de datos no admiten el modo de concurrencia para todos los tipos de ResultSet. En ese caso, debemos verificar si son compatibles con nuestro tipo y modo de simultaneidad deseados mediante el método supportsResultSetConcurrency ().
Métodos en la interfaz ResultSet
Hay 4 categorías de métodos ResultSet. Son:
- Métodos de navegación
- Métodos Getter
- Métodos de Setter
- Métodos varios
Primero, discutiremos los métodos de navegación y luego avanzaremos.
# 1) Métodos de navegación
Este método se utiliza para mover el cursor por el conjunto de datos.
- Booleano absoluto (fila int): Se utiliza para mover el cursor a la fila especificada que se menciona en el parámetro y devolver verdadero si la operación es exitosa; de lo contrario, devolverá falso.
- Void afterLast (): Hace que el cursor ResultSet se mueva después de la última fila.
- Void beforeFirst (): Hace que el cursor ResultSet se mueva antes de la primera fila.
- Booleano primero (): Hace que el cursor ResultSet se mueva a la primera fila. Devuelve Verdadero si la operación es exitosa, de lo contrario False.
- Último booleano (): Hace que el cursor ResultSet se mueva a la última fila. Devuelve Verdadero si la operación es exitosa, de lo contrario False.
- Booleano siguiente (): Hace que el cursor ResultSet se mueva a la siguiente fila. Devuelve Verdadero si hay más registros y Falso si no hay más registros.
- Booleano anterior (): Hace que el cursor ResultSet se mueva a la fila anterior. Devuelve Verdadero si la operación es exitosa, de lo contrario False.
- Relativo booleano (): Mueve el cursor al número dado de filas, ya sea hacia adelante o hacia atrás.
- Int getRow (): Devuelve el número de fila actual al que apunta el objeto ResultSet.
- MoveToCurrentRow () vacío: Mueve el cursor de regreso a la fila actual si está actualmente en la fila de inserción.
- MoveToInsertRow () vacío: Mueve el cursor a la fila específica para insertar la fila en la base de datos. Recuerda la ubicación actual del cursor. Entonces podemos usar el método moveToCurrentRow () para mover el cursor a la fila actual después de la inserción.
En este tutorial, todos los programas están escritos en Java. Hemos utilizado la versión Java 8 y Oracle DB.
>> Puede descargar el software de Oracle desde Aquí
>> Puede descargar la versión 8 de Java desde Aquí
Tiene el proceso de instalación de Java paso a paso.
Programa de ejemplo de JDBC ResultSet: (Uso de métodos de navegación)
|_+_|PRODUCCIÓN:
Datos en la tabla Employee_details
Explicación:
En el programa anterior hemos implementado los métodos first (), last (), beforeFirst (), afterLast (), next (), anterior (), absoluto (), relativo () y getRow () en ResultSet. Para utilizar estos métodos, establecemos los valores ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE en el método prepareStatement.
A continuación, discutiremos cuáles son los métodos Getter en ResultSet:
# 2) Métodos Getter
ResultSet ha almacenado los datos de la tabla de la base de datos. Los métodos getter se utilizan para obtener los valores de la tabla en ResultSet. Para eso, necesitamos pasar el valor del índice de la columna o el nombre de la columna.
Los siguientes son los métodos getter en ResultSet:
- int getInt (int ColumnIndex): Se utiliza para obtener el valor de la columna Index especificada como un tipo de datos int.
- flotar getFloat (int ColumnIndex): Se utiliza para obtener el valor de la columna Index especificada como un tipo de datos flotantes.
- java.sql.date getDate (int ColumnIndex): Se utiliza para obtener el valor de la columna Index especificada como valor de fecha.
- int getInt (String ColumnName): Se utiliza para obtener el valor de la columna especificada como un tipo de datos int.
- float getFloat (String ColumnName): Se utiliza para obtener el valor de la columna especificada como un tipo de datos flotantes.
- Java.sql.date getDate (String ColumnName): Se utiliza para obtener el valor de la columna especificada como valor de fecha.
Hay métodos getter para todos los tipos de datos primitivos (booleanos, largos, dobles) y String también en la interfaz ResultSet. Podemos obtener una matriz y un tipo de datos binarios también de la base de datos. También tiene métodos para eso.
# 3) Métodos de configuración / actualización
Podemos actualizar el valor en la base de datos usando los métodos de ResultSet Updater. Es similar a los métodos Getter, pero aquí necesitamos pasar los valores / datos para que la columna en particular se actualice en la base de datos.
Los siguientes son los métodos de actualización en ResultSet:
- updateInt vacío (int ColumnIndex, int Valor): Se utiliza para actualizar el valor de la columna Index especificada con un valor int.
- void updateFloat (int ColumnIndex, float f): Se utiliza para actualizar el valor de la columna Index especificada con el valor flotante.
- void updateDate (int ColumnIndex, Fecha d): Se utiliza para actualizar el valor de la columna Index especificada con el valor de la fecha.
- void updateInt (String ColumnName, int Value): Se utiliza para actualizar el valor de la columna especificada con el valor int dado.
- void updateFloat (String ColumnName, float f): Se utiliza para actualizar el valor de la columna especificada con el valor flotante dado.
- Java.sql.date getDate (String ColumnName): Se utiliza para actualizar el valor de la columna especificada con el valor de fecha dado.
Hay métodos Updater para todos los tipos de datos primitivos (booleanos, largos, dobles) y String también en la interfaz ResultSet.
Los métodos de actualización simplemente actualizan los datos en el objeto ResultSet. Los valores se actualizarán en la base de datos después de llamar al método insertRow o updateRow.
Actualizar una fila:
Podemos actualizar los datos en una fila llamando a los métodos updateX (), pasando el nombre o índice de la columna y los valores para actualizar. Podemos usar cualquier tipo de datos en lugar de X en el método updateX. Hasta ahora, hemos actualizado los datos en el objeto ResultSet. Para actualizar los datos en la base de datos, tenemos que llamar al método updateRow ().
Insertar una fila:
Necesitamos usar moveToInsertRow () para mover el cursor para insertar una nueva fila. Ya hemos cubierto esto en la sección de métodos de navegación. A continuación, necesitamos llamar al método updateX () para agregar los datos a la fila. Debemos proporcionar datos para todas las columnas; de lo contrario, usará el valor predeterminado de esa columna en particular.
Después de actualizar los datos, necesitamos llamar al método insertRow (). Luego use el método moveToCurrentRow (), para llevar la posición del cursor a la fila en la que estábamos antes de comenzar a insertar una nueva fila.
Ejemplo de conjunto de resultados:
|_+_|PRODUCCIÓN:
Explicación:
En el programa anterior, lo que hemos hecho es primero, almacenamos los datos de la tabla Employee_details en el objeto ResultSet usando la consulta SELECT. Luego, mostramos los datos de la última fila en la tabla employee_details usando el método last () de ResultSet. El método moveToInsertRow () hace que el cursor apunte a la fila actual, ahora la fila actual es la última fila.
Los métodos updateXXX () utilizados para actualizar los valores de la fila y el método insertRow () ha insertado los datos en una nueva fila. Usando el método absoluto (), hicimos que el cursor apunte al 5thfila. El método UpdateInt () se ha utilizado para actualizar EMPNUM con una nueva identificación de 5thempleado en la mesa. Después de eso, se muestran los datos para verificar si el EMPNUM está actualizado o no.
Hizo que el cursor apunte a la última fila de la tabla usando last () y lo mostró. Para realizar la lógica anterior, necesitamos establecer los valores ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE en el método prepareStatement.
# 4) Métodos varios
- vacío cerrado (): Se utiliza para cerrar la instancia de ResultSet y liberar los recursos asociados con la instancia de ResultSet.
- ResultSetMetaData getMetaData (): Devuelve la instancia ResultSetMetaData. Tiene la información sobre el tipo y la propiedad de las columnas de la salida de la consulta. Aprenderemos más sobre ResultSetMetaData en la siguiente sección.
ResultSetMetaData
¿Qué son los metadatos?
Metadatos significa datos sobre datos. Usando esta interfaz, obtendremos más información sobre ResultSet. Está disponible en el paquete java.sql. Cada objeto ResultSet está asociado con un objeto ResultSetMetaData.
Este objeto tendrá los detalles de las propiedades de las columnas como el tipo de datos de la columna, el nombre de la columna, el número de columnas, el nombre de la tabla, el nombre del esquema, etc. Podemos obtener el objeto ResultSetMetaData usando el método getMetaData () de ResultSet.
Sintaxis de ResultSetMetaData:
|_+_|Métodos importantes de la interfaz ResultSetMetaData:
Nombre del método | Descripción |
---|---|
boolean isCaseSensitive (columna int) | Devuelve verdadero si la columna dada distingue entre mayúsculas y minúsculas, de lo contrario es falso |
String getColumnName (columna int) | Devuelve el nombre de la columna de la columna en particular. |
String getColumnTypeName (columna int) | Devuelve el tipo de datos de la columna particular que hemos pasado como parámetro |
String getTableName (columna int) | Devuelve el nombre de la tabla de la columna. |
String getSchemaName (columna int) | Devuelve el nombre de esquema de la tabla de la columna. |
int getColumnCount () | Devuelve el número de columnas del ResultSet |
boolean isAutoIncrement (columna int) | Devuelve verdadero si la columna dada es Incremento automático, de lo contrario es falso |
ResultSetMetaData Ejemplo
|_+_|PRODUCCIÓN:
Explicación:
el mejor software de seguimiento de correo electrónico para gmail
En el programa anterior, hemos implementado los métodos getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () y getSchemaName () en la interfaz ResultSetMetaData.
Base de datosMetaData
La interfaz DatabaseMetaData proporciona información sobre la base de datos, como el nombre de la base de datos, la versión de la base de datos, etc.
Métodos importantes de la interfaz DatabaseMetaData:
Nombre del método | Descripción |
---|---|
String getStringFunctions () | Devuelve la lista de funciones de cadena disponibles en la base de datos conectada |
Cadena getDriverName () | Devolverá el nombre del controlador JDBC que estamos usando en nuestro programa Java |
String getDriverVersion () | Devuelve el número de versión del controlador JDBC |
String getUserName () | Devuelve el nombre de usuario de la base de datos que estamos usando |
String getDatabaseProductName () | Devuelve el nombre de la base de datos que estamos usando |
String getDatabaseProductVersion () | Devuelve el número de versión de la base de datos que estamos usando |
ResultSet getSchemas () | Devuelve los nombres de los esquemas disponibles en la base de datos conectada |
String getTimeDateFunctions () | Devuelve la lista de funciones de fecha y hora disponibles en la base de datos conectada |
Cadena getURL () | Devuelve la URL de la base de datos. |
Boolean isReadOnly () | Devuelve si la base de datos está en modo de solo lectura |
Soporte booleano BatchUpdates () | Devuelve si la base de datos admite actualizaciones por lotes |
Boolean supportsSavepoints () | Devuelve si la base de datos admite puntos de guardado |
Boolean supportsStatementPooling () | Devuelve si la base de datos admite la agrupación de declaraciones |
Boolean supportsStoredProcedures () | Devuelve si la base de datos admite procedimientos almacenados |
Soportes booleanosOuterJoins () | Devuelve si la base de datos admite Outer Join |
Aquí, enumeramos algunos métodos importantes de la interfaz DatabaseMetaData. Puede consultar el sitio oficial de la Oráculo donde puede ver todos los métodos disponibles en la interfaz DatabaseMetaData.
Ejemplo de DatabaseMetaData:
|_+_|PRODUCCIÓN:
Explicación:
En el programa anterior, hemos utilizado / implementado getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnatchUpdates (), admite , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () y supportsOuterJoins () métodos en la interfaz DatabaseMetaData.
Puntos a tener en cuenta:
- La interfaz JDBC ResultSet se utiliza para almacenar los datos de la base de datos y utilizarlos en nuestro programa Java.
- También podemos usar ResultSet para actualizar los datos usando métodos updateXXX ().
- El objeto ResultSet apunta el cursor antes de la primera fila de los datos de resultado. Usando el método next (), podemos iterar a través del ResultSet.
- Tenemos métodos de navegación de ResultSet para avanzar más en el objeto ResultSet
- ResultMetaData se utiliza para obtener más información sobre el ResultSet, como el nombre de la columna, el número de columnas, el tipo de datos de la columna, etc.
- DatabaseMetData se utiliza para obtener la información sobre la base de datos que tenemos conectada
Preguntas frecuentes
P # 1) ¿Cuál es el uso de ResultSet?
Responder: ResultSet se utiliza para almacenar y recuperar los datos de la base de datos. Cuando se haya ejecutado el método executeQuery (), devolverá el objeto ResultSet. Podemos usar ese objeto ResultSet en nuestro programa para realizar la lógica.
P # 2) ¿Cómo comprobar si el ResultSet está vacío o no?
Responder: No hay métodos predefinidos como length (), size () disponibles para verificar IsResultSet Empty. Podemos usar el método next () para iterar y si devuelve True, entonces no está vacío, si devuelve False significa que ResultSet está vacío.
P # 3) ¿Es posible que ResultSet sea nulo?
Responder: No, el método executeQuery () devuelve el objeto ResultSet que nunca puede ser nulo.
P # 4) ¿Qué es ResultSet actualizable?
Responder: Se utiliza un objeto ResultSet actualizable para actualizar los datos en la columna, insertar datos en columnas y eliminar filas. Para hacer que un ResultSet sea actualizable, necesitamos hacer que el tipo de desplazamiento sea sensible o insensible y el tipo CONCUR sea actualizable.
|_+_|P # 5) ¿Cómo obtener el nombre de la base de datos que se ha conectado?
Responder: Podemos usar el método getDatabaseProductName () del objeto DatabaseMetaData.
Conclusión
En este tutorial, hemos discutido qué son las interfaces ResultSet, ResultSetMetaData y DatabaseMetaData y sus métodos importantes que se usan comúnmente en los programas JDBC. También hemos visto cómo actualizar datos en DB usando ResultSet. ResultSetMetadata contiene información sobre ResultSet, como el nombre de la columna, el recuento de columnas, etc.
DatabaseMetaData contiene información de la base de datos.
Lectura recomendada
- JDBC DriverManager, JDBC PreparedStatement y Statement
- Tutorial de Java JDBC: ¿Qué es JDBC (conectividad de base de datos Java)?
- Gestión de transacciones Java JDBC con ejemplo
- Tutorial de procedimiento almacenado y procesamiento por lotes de JDBC
- Tutorial de conexión Java JDBC con ejemplo de programación
- Interfaces comparables y comparativas en Java
- Prueba de la base de datos de selenio (utilizando WebDriver y la API de JDBC)
- Manejo de excepciones JDBC: cómo manejar excepciones SQL