Diferencia entre RowSet conectado y desconectado en Java JDBC

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:

  1. CachedRowSet
  2. WebRowSet
  3. JoinRowSet
  4. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *