Un RowSet es un contenedor alrededor de un objeto ResultSet. Se puede conectar, desconectar de la base de datos y se puede serializar. Mantiene un componente JavaBean estableciendo las propiedades. Puede pasar un objeto RowSet a través de la red. De forma predeterminada, el objeto RowSet se puede desplazar y actualizar.
Este diagrama le dará más idea sobre la jerarquía de clases de ResultSet y RowSet. También es útil averiguar qué implementación de RowSet está conectada y cuál está desconectada. Puede ver que hay dos implementaciones principales de la interfaz RowSet, JdbcRowSet que está conectado y CachedRowSet que está desconectado.
El objeto RowSet es de dos tipos, como se indica a continuación:
- Conjuntos de filas conectadas
- Conjuntos de filas desconectados
Analicemos los dos tipos anteriores de la siguiente manera:
Tipo 1: conjuntos de filas conectadas
Un objeto RowSet conectado se conecta a la base de datos mediante un controlador JDBC. Establece una conexión con la base de datos y realiza las operaciones requeridas. La conexión se mantiene hasta que se cierra el objeto RowSet.
Tipo 2: conjuntos de filas desconectados
Un objeto RowSet desconectado se conecta a la base de datos solo mientras lee de la base de datos y mientras escribe en ella. Un objeto RowSet desconectado no mantiene una conexión con la base de datos o la fuente de datos mientras procesa los datos y, por lo tanto, funciona de forma independiente.
Un objeto RowSet desconectado es casi lo mismo que un objeto RowSet conectado, excepto que son:
- Más ligero en peso en comparación con los objetos RowSet conectados.
- Serializable.
- Capaz de enviar datos a clientes ligeros como móviles, etc.
JDBC proporciona cuatro clases que representan objetos RowSet desconectados que se enumeran a continuación de la siguiente manera:
- CachedRowSet
- WebRowSet
- JoinRowSet
- FilteredRowSet
Analicemos cada una de las clases anteriores en detalle para percibir su funcionamiento de la siguiente manera:
Clase 1: CachedRowSet
CachedRowSet es la implementación base de los conjuntos de filas desconectados. Se conecta a la fuente de datos, lee datos de ella, se desconecta de la fuente de datos y procesa los datos recuperados, se vuelve a conectar a la fuente de datos y escribe las modificaciones.
Clase 2: WebRowSet:
Un WebRowSet amplía el CachedRowSet.
Clase 3: JoinRowSet
Esto es capaz de enviar datos a clientes ligeros como móviles, etc.
Clase 4: FilteredRowSet:
Esto le permite reducir el número de filas que son visibles en un RowSet.
Ahora llegando al concepto excéntrico para descubrir la diferencia entre RowSet conectado y desconectado
Como ya hemos mencionado anteriormente, la principal diferencia entre RowSet conectado y desconectado es que el primero siempre mantiene una conexión con la base de datos, mientras que el segundo no. Se conecta a la base de datos, obtiene los datos y luego cierra la conexión. Aquí hay un par de diferencias más entre ellos:
1) Las bases de datos desconectadas se conectan a la base de datos solo cuando quieren leer o escribir, todas las veces que están desconectadas de la base de datos, por otro lado, las bases de datos conectadas mantienen vivas las conexiones JDBC todo el tiempo.
2) Solo JdbcRowSet de JDBC 4.1 API está conectado, el resto como CachedRowSet, WebRowSet están desconectados de la implementación de RowSet.
3) RowSet desconectado es serializable y por eso es adecuado para enviar a través de la red
Esta tabla proporciona una buena comparación de las funciones admitidas por diferentes implementaciones de RowSet en la API de JDBC.
Características | JdbcRowSet | CacheRowSet | WebRowSet |
---|---|---|---|
desplazable | No permitido | No permitido | No permitido |
actualizable | No permitido | No permitido | No permitido |
Conectado | No permitido | No permitido | No permitido |
Desconectado | No permitido | No permitido | |
Serializable | No permitido | No permitido | |
Generar XML | No permitido | ||
Consumir XML | No permitido |
Conjunto de filas en Java
Implementación: Recuperaremos los registros de los empleados utilizando RowSet en lugar de la interfaz ResultSet. Hasta ahora, es posible que solo haya visto un objeto ResultSet que devuelve el resultado de la consulta, pero desde la API de JDBC 4.1, puede usar cualquier implementación de la implementación de RowSet para consultar la base de datos y recuperar resultados.
- En el siguiente ejemplo de JDBC, usaremos la clase JdbcRowSet. Para crear un objeto de JdbcRowSet, necesita un RowSetFactory, que se puede crear utilizando el método newFactory() de RowSetProvider.
- Una vez que tenga un objeto de RowSet, puede pasar detalles de configuración como la URL de la base de datos, el nombre de usuario y la contraseña llamando a su respectivo método setProperties() como setURL(), setUsername() y setPassword() .
- Después de la configuración, es hora de especificar nuestra consulta SQL SELECT, usaremos un método llamado setCommand() para proporcionar la consulta. Ahora puede ejecutar la consulta llamando al método execute(). ¿Notaste una API mucho más limpia y simple?
- Después de la ejecución de la consulta, es hora de recuperar los datos, que es muy similar a lo que está acostumbrado llamando a varios métodos getXXX() desde ResultSet. Solo necesita iterar a través de RowSet al verificar el método hasNext() en el ciclo while y obtener datos fila por fila.
Ejemplo
Java
// Java Program to illustrate how to use RowSet, // RowSetProvider, and RowSetFactory in JDBC // Importing required classes import java.sql.*; import javax.sql.rowset.*; // Main class // RowSetDemo public class GFG { // Main driver method public static void main(String[] args) { // Setting username and password to access database String url = "jdbc:mysql://localhost:3306/addressBook"; String userName = "root"; String password = "mysql123"; // Try block to check for exceptions try { // Step 1: Create a factory object for rowset RowSetFactory rowSetFactory = RowSetProvider.newFactory(); // Step 2: Creating a JDBC rowset object from // the factory JdbcRowSet rowSet = rowSetFactory.createJdbcRowSet(); // Step 3: Setting connection properties rowSet.setUrl(url); rowSet.setUsername(userName); rowSet.setPassword(password); // Step 4: Setting SQL Query to execute rowSet.setCommand("SELECT * FROM contact"); // Step 5: Executing an SQL query rowSet.execute(); // Print and display the attributes System.out.println( "id \tName \tDepartment \tEmail \tSalary"); // Iterating over RowSet object // using next() method while (rowSet.next()) { // Print and display all employee // attributes System.out.println( rowSet.getInt("id") + "\t" + rowSet.getString("name") + "\t" + rowSet.getString("department") + "\t" + rowSet.getString("email") + "\t" + rowSet.getString("salary")); } } // Catch block to handle the exceptions catch (SQLException sqle) { // Display the exception along with line number // using printStackTrace() method sqle.printStackTrace(); } } }
Producción:
Id Name Department Email Salary 1 Jack Sales jack@bluechip.com 9000 2 Jill Marketing jill@bluechip.com 8000 3 Tom Accounts tom@bluechip.com 7000
Está claro a partir del resultado anterior que RowSet se usa para recuperar datos de la base de datos en lugar de ResultSet.
Publicación traducida automáticamente
Artículo escrito por praveen13kulkarni y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA