Apache Commons DBUtils - Guía rápida

La biblioteca Apache Commons DbUtils es un conjunto bastante pequeño de clases, que están diseñadas para facilitar el procesamiento de llamadas JDBC sin pérdida de recursos y para tener un código más limpio. Como la limpieza de recursos de JDBC es bastante tediosa y propensa a errores, las clases DBUtils ayudan a abstraer el código de la placa de caldera, de modo que los desarrolladores pueden centrarse únicamente en las operaciones relacionadas con la base de datos.

Ventajas de DBUtils

Las ventajas de usar Apache Commons DBUtils se explican a continuación:

  • No Resource Leakage - Las clases DBUtils aseguran que no ocurra ninguna fuga de recursos.

  • Clean & Clear code - Las clases DBUtils proporcionan un código limpio y claro para realizar las operaciones de la base de datos sin necesidad de escribir un código de limpieza o prevención de fugas de recursos.

  • Bean Mapping - La clase DBUtils admite rellenar automáticamente JavaBeans a partir de un conjunto de resultados.

Principios de diseño de DBUtils

Los principios de diseño de Apache Commons DBUtils son los siguientes:

  • Small - La biblioteca DBUtils es de tamaño muy pequeño con menos clases, por lo que es fácil de entender y usar.

  • Transparent- La biblioteca DBUtils no está haciendo mucho trabajo detrás de escena. Simplemente toma una consulta y se ejecuta.

  • Fast - Las clases de biblioteca DBUtils no crean muchos objetos de fondo y son bastante rápidas en las ejecuciones de operaciones de bases de datos.

Para comenzar a desarrollar con DBUtils, debe configurar su entorno DBUtils siguiendo los pasos que se muestran a continuación. Suponemos que está trabajando en una plataforma Windows.

Instalar Java

Instale J2SE Development Kit 5.0 (JDK 5.0) desde el sitio oficial de Java .

Asegúrese de que las siguientes variables de entorno estén configuradas como se describe a continuación:

  • JAVA_HOME - Esta variable de entorno debe apuntar al directorio donde instaló el JDK, por ejemplo, C: \ Archivos de programa \ Java \ jdk1.5.0.

  • CLASSPATH - Esta variable de entorno debe tener configuradas las rutas adecuadas, por ejemplo, C: \ Archivos de programa \ Java \ jdk1.5.0_20 \ jre \ lib.

  • PATH - Esta variable de entorno debe apuntar al contenedor JRE apropiado, por ejemplo, C: \ Archivos de programa \ Java \ jre1.5.0_20 \ bin.

Es posible que ya tenga estas variables configuradas, pero solo para asegurarse de que aquí se explica cómo verificar.

  • Vaya al panel de control y haga doble clic en Sistema. Si es un usuario de Windows XP, es posible que tenga que abrir Rendimiento y mantenimiento antes de ver el icono Sistema.

  • Vaya a la pestaña Avanzado y haga clic en Variables de entorno.

  • Ahora verifique si todas las variables mencionadas anteriormente están configuradas correctamente.

Instalar base de datos

Lo más importante que necesitará, por supuesto, es una base de datos en ejecución real con una tabla que puede consultar y modificar.

Instale una base de datos que sea más adecuada para usted. Puede tener muchas opciones y las más comunes son:

  • MySQL DB:MySQL es una base de datos de código abierto. Puede descargarlo del sitio oficial de MySQL . Recomendamos descargar la instalación completa de Windows.

    Además, descargue e instale MySQL Administrator y MySQL Query Browser . Estas son herramientas basadas en GUI que facilitarán mucho su desarrollo.

    Finalmente, descargue y descomprima MySQL Connector / J (el controlador MySQL JDBC) en un directorio conveniente. Para el propósito de este tutorial, asumiremos que ha instalado el controlador en C: \ Archivos de programa \ MySQL \ mysql-connector-java-5.1.8.

    En consecuencia, establezca la variable CLASSPATH en C: \ Archivos de programa \ MySQL \ mysql-connector-java-5.1.8 \ mysql-connector-java-5.1.8-bin.jar. La versión de su controlador puede variar según su instalación.

  • PostgreSQL DB:PostgreSQL es una base de datos de código abierto. Puede descargarlo del sitio oficial de PostgreSQL .

    La instalación de Postgres contiene una herramienta administrativa basada en GUI llamada pgAdmin III. Los controladores JDBC también se incluyen como parte de la instalación.

  • Oracle DB- Oracle DB es una base de datos comercial vendida por Oracle. Suponemos que tiene los medios de distribución necesarios para instalarlo.

    La instalación de Oracle incluye una herramienta administrativa basada en GUI llamada Enterprise Manager. Los controladores JDBC también se incluyen como parte de la instalación.

Instalar controladores de base de datos

El último JDK incluye un controlador JDBC-ODBC Bridge que hace que la mayoría de los controladores de Open Database Connectivity (ODBC) estén disponibles para los programadores que utilizan la API JDBC.

Hoy en día, la mayoría de los proveedores de bases de datos suministran los controladores JDBC adecuados junto con la instalación de la base de datos. Entonces, no debes preocuparte por esta parte.

Establecer credencial de base de datos

Para este tutorial usaremos la base de datos MySQL. Cuando instala cualquiera de las bases de datos anteriores, su ID de administrador se establece enroot y proporciona la posibilidad de establecer una contraseña de su elección.

Con el ID de root y la contraseña puede crear otro ID de usuario y contraseña, o puede utilizar el ID de root y la contraseña para su aplicación JDBC.

Hay varias operaciones de base de datos, como la creación y eliminación de bases de datos, que necesitarían una identificación de administrador y una contraseña.

Para el resto del tutorial de JDBC, usaríamos la base de datos MySQL con username como ID y password como contraseña.

Si no tiene privilegios suficientes para crear nuevos usuarios, puede pedirle a su administrador de base de datos (DBA) que cree una identificación de usuario y una contraseña para usted.

Crear base de datos

Para crear el emp base de datos, utilice los siguientes pasos:

Paso 1

Abre un Command Prompt y cambie al directorio de instalación de la siguiente manera:

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

Note: El camino hacia mysqld.exepuede variar según la ubicación de instalación de MySQL en su sistema. También puede consultar la documentación sobre cómo iniciar y detener su servidor de base de datos.

Paso 2

Inicie el servidor de la base de datos ejecutando el siguiente comando, si ya no se está ejecutando.

C:\Program Files\MySQL\bin>mysqld
C:\Program Files\MySQL\bin>

Paso 3

Crea el emp base de datos ejecutando el siguiente comando:

C:\Program Files\MySQL\bin> mysqladmin create emp -u root -p
Enter password: ********
C:\Program Files\MySQL\bin>

Crear mesa

Para crear el Employees tabla en la base de datos emp, utilice los siguientes pasos:

Paso 1

Abre un Command Prompt y cambie al directorio de instalación de la siguiente manera:

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

Paso 2

Inicie sesión en la base de datos de la siguiente manera:

C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>

Paso 3

Crea la tabla Employee como sigue -

mysql> use emp;
mysql> create table Employees
    -> (
    -> id int not null,
    -> age int not null,
    -> first varchar (255),
    -> last varchar (255)
    -> );
Query OK, 0 rows affected (0.08 sec)
mysql>

Crear registros de datos

Finalmente, crea algunos registros en la tabla Empleado de la siguiente manera:

mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
Query OK, 1 row affected (0.00 sec)

mysql>

Para una comprensión completa de la base de datos MySQL, estudie el Tutorial de MySQL .

Descargar archivo Commons DBUtils

Descargue la última versión del archivo jar de Apache Common DBUtils desde commons-dbutils-1.7-bin.zip , MySql connector mysql-connector-java-5.1.28-bin.jar , Apache Commons DBCP commons-dbcp2-2.1.1-bin. zip , Apache Commons Pool commons-pool2-2.4.3-bin.zip y Apache Commons Logging commons-logging-1.2-bin.zip . En el momento de escribir este tutorial, hemos descargado commons-dbutils-1.7-bin.zip , mysql-connector-java-5.1.28-bin.jar , commons-dbcp2-2.1.1-bin.zip , commons-pool2 -2.4.3-bin.zip , commons-logging-1.2-bin.zip y lo copié en C: \> carpeta Apache.

SO Nombre de archivo
Ventanas commons-dbutils-1.7-bin.zip
Linux commons-dbutils-1.7-bin.tar.gz
Mac commons-dbutils-1.7-bin.tar.gz

Establecer el entorno DBUtils común de Apache

Selecciona el APACHE_HOMEvariable de entorno para apuntar a la ubicación del directorio base donde se almacena Apache jar en su máquina. Suponiendo que hemos extraído commons-dbutils-1.7-bin.zip en la carpeta Apache en varios sistemas operativos de la siguiente manera.

SO Salida
Ventanas Establezca la variable de entorno APACHE_HOME en C: \ Apache
Linux exportar APACHE_HOME = / usr / local / Apache
Mac exportar APACHE_HOME = / Library / Apache

Establecer la variable CLASSPATH

Selecciona el CLASSPATHvariable de entorno para apuntar a la ubicación del jar de Common IO. Suponiendo que ha almacenado commons-dbutils-1.7-bin.zip en la carpeta Apache en varios sistemas operativos de la siguiente manera.

SO Salida
Ventanas Establezca la variable de entorno CLASSPATH en% CLASSPATH%;% APACHE_HOME% \ commons-dbutils-1.7.jar; mysql-connector-java-5.1.28.jar; commons-dbcp2-2.1.1.jar; commons-pool2-2.4. 3.jar; commons-logging-1.2.jar;
Linux export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-dbutils-1.7.jar: mysql-connector-java-5.1.28.jar: commons-dbcp2-2.1.1: commons-pool2-2.4.3.jar: commons-logging -1.2.jar.
Mac export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-dbutils-1.7.jar: mysql-connector-java-5.1.28: commons-dbcp2-2.1.1.jar: commons-pool2-2.4.3.jar; commons-logging -1.2.jar.

Ahora está listo para comenzar a experimentar con DBUtils. El próximo capítulo le brinda un ejemplo de muestra sobre programación DBUtils.

Este capítulo proporciona un ejemplo de cómo crear una aplicación JDBC simple utilizando la biblioteca DBUtils. Esto le mostrará cómo abrir una conexión de base de datos, ejecutar una consulta SQL y mostrar los resultados.

Todos los pasos mencionados en este ejemplo de plantilla se explicarán en los capítulos siguientes de este tutorial.

Creación de la aplicación JDBC

Hay los siguientes seis pasos involucrados en la construcción de una aplicación JDBC:

  • Import the packages- Requiere que incluya los paquetes que contienen las clases JDBC que son necesarias para la programación de la base de datos. Más a menudo, usandoimport java.sql.* Será suficiente.

  • Register the JDBC driver - Requiere que inicialice un controlador, para que pueda abrir un canal de comunicación con la base de datos.

  • Open a connection - Requiere usar el DriverManager.getConnection() método para crear un objeto Connection, que representa una conexión física con la base de datos.

  • Execute a query - Requiere el uso de un objeto de tipo Statement para construir y enviar una sentencia SQL a la base de datos.

  • Extract data from result set - Requiere que use el apropiado ResultSet.getXXX() método para recuperar los datos del conjunto de resultados.

  • Clean up the environment - Requiere cerrar explícitamente todos los recursos de la base de datos en lugar de depender de la recolección de basura de la JVM.

Código de muestra

Este ejemplo de muestra puede servir como plantilla, cuando necesite crear su propia aplicación JDBC en el futuro.

Este código de muestra se ha escrito en función del entorno y la configuración de la base de datos realizada en el capítulo anterior.

Copie y pegue el siguiente ejemplo en MainApp.java, compile y ejecute de la siguiente manera:

MainApp.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
   
   // Database credentials
   static final String USER = "root";
   static final String PASS = "admin";
   
   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      
      //Step 3: Create a ResultSet Handler to handle Employee Beans
      ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
      
      try {
         Employee emp = queryRunner.query(conn,
            "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
         //Display values
         System.out.print("ID: " + emp.getId());
         System.out.print(", Age: " + emp.getAge());
         System.out.print(", First: " + emp.getFirst());
         System.out.println(", Last: " + emp.getLast());
      } finally {
         DbUtils.close(conn);
      }
   }
}

Employee.java

El programa se da a continuación:

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

Ahora compilemos el ejemplo anterior de la siguiente manera:

C:\>javac MainApp.java Employee.java
C:\>

Cuando corres MainApp, produce el siguiente resultado:

C:\>java MainApp
Connecting to database...
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

El siguiente ejemplo demostrará cómo crear un registro usando Insertar consulta con la ayuda de DBUtils. Insertaremos un registro en la tabla de empleados.

Sintaxis

La sintaxis para crear una consulta se da a continuación:

String insertQuery ="INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)";
int insertedRecords = queryRunner.update(conn, insertQuery,104,30, "Sohan","Kumar");

Dónde,

  • insertQuery - Insertar consulta con marcadores de posición.

  • queryRunner - Objeto QueryRunner para insertar objeto empleado en la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de inserción. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
   
   // Database credentials
   static final String USER = "root";
   static final String PASS = "admin";
   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      DbUtils.loadDriver(JDBC_DRIVER);
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      try {
         int insertedRecords = queryRunner.update(conn,
            "INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)",
            104,30, "Sohan","Kumar");
         System.out.println(insertedRecords + " record(s) inserted");
      } finally {
         DbUtils.close(conn);
      }
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:

1 record(s) inserted.

El siguiente ejemplo demostrará cómo leer un registro usando la consulta de lectura con la ayuda de DBUtils. Leeremos un registro de la tabla de empleados.

Sintaxis

La sintaxis para la consulta de lectura se menciona a continuación:

ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Dónde,

  • resultHandler - Objeto ResultSetHandler para mapear el conjunto de resultados al objeto Empleado.

  • queryRunner - Objeto QueryRunner para leer un objeto de empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   // Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      
      //Step 3: Create a ResultSet Handler to handle Employee Beans
      ResultSetHandler<Employee> resultHandler =
         new BeanHandler<Employee>(Employee.class);
      try {
         Employee emp = queryRunner.query(conn,
            "SELECT * FROM employees WHERE id=?", resultHandler, 104);
         //Display values
         System.out.print("ID: " + emp.getId());
         System.out.print(", Age: " + emp.getAge());
         System.out.print(", First: " + emp.getFirst());
         System.out.println(", Last: " + emp.getLast());
      } finally {
         DbUtils.close(conn);
      }
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:

ID: 104, Age: 30, First: Sohan, Last: Kumar

El siguiente ejemplo demostrará cómo actualizar un registro usando la consulta de actualización con la ayuda de DBUtils. Actualizaremos un registro en la tabla de empleados.

Sintaxis

La sintaxis para la consulta de actualización es la siguiente:

String updateQuery = "UPDATE employees SET age=? WHERE id=?";
int updatedRecords = queryRunner.update(conn, updateQuery, 33,104);

Dónde,

  • updateQuery - Actualización de la consulta con marcadores de posición.

  • queryRunner - Objeto QueryRunner para actualizar el objeto empleado en la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de actualización. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   // Database credentials
   static final String USER = "root";
   static final String PASS = "admin";
   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      DbUtils.loadDriver(JDBC_DRIVER);
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      try {
         int updatedRecords = queryRunner.update(conn,
            "UPDATE employees SET age=? WHERE id=?", 33,104);
         System.out.println(updatedRecords + " record(s) updated.");
      } finally {
         DbUtils.close(conn);
      }
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:

1 record(s) updated.

El siguiente ejemplo demostrará cómo eliminar un registro utilizando Eliminar consulta con la ayuda de DBUtils. Eliminaremos un registro en la tabla de empleados.

Sintaxis

La sintaxis para eliminar la consulta se menciona a continuación:

String deleteQuery = "DELETE FROM employees WHERE id=?";
int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);

Dónde,

  • deleteQuery - BORRAR consulta que tenga marcadores de posición.

  • queryRunner - Objeto QueryRunner para eliminar el objeto empleado en la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de eliminación. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   // Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      DbUtils.loadDriver(JDBC_DRIVER);
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      try {
         int deletedRecords = queryRunner.update(conn,
            "DELETE from employees WHERE id=?", 104);
         System.out.println(deletedRecords + " record(s) deleted.");
      } finally {
         DbUtils.close(conn);
      }
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:

1 record(s) deleted.

los org.apache.commons.dbutils.QueryRunnerclass es la clase central en la biblioteca DBUtils. Ejecuta consultas SQL con estrategias conectables para manejar ResultSets. Esta clase es segura para subprocesos.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.QueryRunner:

public class QueryRunner
   extends AbstractQueryRunner

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Utilice métodos de objeto QueryRunner para realizar operaciones de base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo leer un registro usando la clase QueryRunner. Leeremos uno de los registros disponibles en la tabla de empleados.

Sintaxis

ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = 
   queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Dónde,

  • resultHandler - Objeto ResultSetHandler para asignar el conjunto de resultados al objeto Employee.

  • queryRunner - Objeto QueryRunner para leer el objeto empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      //Step 3: Create a ResultSet Handler to handle Employee Beans
      ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);

      try {
         Employee emp = queryRunner.query(conn,
            "SELECT * FROM employees WHERE id=?", resultHandler, 103);
         //Display values
         System.out.print("ID: " + emp.getId());
         System.out.print(", Age: " + emp.getAge());
         System.out.print(", First: " + emp.getFirst());
         System.out.println(", Last: " + emp.getLast());
      } finally {
         DbUtils.close(conn);
      }        
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

ID: 103, Age: 28, First: Sumit, Last: Mittal

los org.apache.commons.dbutils.AsyncQueryRunnerLa clase ayuda a ejecutar consultas SQL de larga ejecución con soporte asíncrono. Esta clase es segura para subprocesos. Esta clase admite los mismos métodos que QueryRunner pero devuelve objetos invocables que se pueden usar más tarde para recuperar el resultado.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.AsyncQueryRunner:

public class AsyncQueryRunner
   extends AbstractQueryRunner

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Utilice los métodos de objeto AsyncQueryRunner para realizar operaciones en la base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo actualizar un registro usando la clase AsyncQueryRunner. Actualizaremos uno de los registros disponibles en la tabla de empleados.

Sintaxis

String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
            "UPDATE employees SET age=? WHERE id=?", 33,103);

Dónde,

  • updateQuery - Actualización de la consulta con marcadores de posición.

  • asyncQueryRunner - objeto asyncQueryRunner para actualizar el objeto del empleado en la base de datos.

  • future - Objeto futuro para recuperar el resultado más tarde.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de actualización en modo asíncrono. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.AsyncQueryRunner;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException; 
import java.util.concurrent.ExecutorCompletionService; 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; 
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws 
      SQLException, InterruptedException, 
      ExecutionException, TimeoutException {
      Connection conn = null;

      AsyncQueryRunner asyncQueryRunner = new AsyncQueryRunner( Executors.newCachedThreadPool());

      DbUtils.loadDriver(JDBC_DRIVER);       
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      Future<Integer> future = null;
      try {
         future = asyncQueryRunner.update(conn, 
            "UPDATE employees SET age=? WHERE id=?", 33,103);         
         Integer updatedRecords = future.get(10, TimeUnit.SECONDS);
         System.out.println(updatedRecords + " record(s) updated.");
      } finally {
         DbUtils.close(conn);
      }  
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

1 record(s) updated.

los org.apache.commons.dbutils.ResultSetHandler La interfaz es responsable de convertir ResultSets en objetos.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.ResultSetHandler:

public interface ResultSetHandler<T>

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Crear implementación de ResultSetHandler.

  • Step 3 - Pase resultSetHandler al objeto QueryRunner y realice operaciones de base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo mapear un registro usando la clase ResultSetHandler. Leeremos uno de los registros disponibles en la tabla de empleados.

Sintaxis

Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Dónde,

  • resultHandler - Objeto ResultSetHandler para asignar el conjunto de resultados al objeto Employee.

  • queryRunner - Objeto QueryRunner para leer el objeto empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Arrays;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      //Step 3: Create a ResultSet Handler to handle Employee Beans
      ResultSetHandler<Object[]> handler = new ResultSetHandler<Object[]>() {
         public Object[] handle(ResultSet rs) throws SQLException {
            if (!rs.next()) {
               return null;
            }
            ResultSetMetaData meta = rs.getMetaData();
            int cols = meta.getColumnCount();
            Object[] result = new Object[cols];

            for (int i = 0; i < cols; i++) {
               result[i] = rs.getObject(i + 1);
            }
            return result;
         }
      };

      try {
         Object[] result  = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
            handler, 103);
         //Display values
         System.out.print("Result: " + Arrays.toString(result));            
      } finally {
         DbUtils.close(conn);
      }              
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

Connecting to database...
Result: [103, 33, Sumit, Mittal]

los org.apache.commons.dbutils.BeanHandleres la implementación de la interfaz ResultSetHandler y es responsable de convertir la primera fila ResultSet en un JavaBean. Esta clase es segura para subprocesos.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.BeanHandler:

public class BeanHandler<T>
   extends Object implements ResultSetHandler<T>

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Obtener la implementación de ResultSetHandler como objeto BeanHandler.

  • Step 3 - Pase resultSetHandler al objeto QueryRunner y realice operaciones de base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo leer un registro usando la clase BeanHandler. Leeremos uno de los registros disponibles en la tabla de empleados y lo asignaremos al bean de empleado.

Sintaxis

Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Dónde,

  • resultHandler - Objeto BeanHandler para asignar el conjunto de resultados al objeto Empleado.

  • queryRunner - Objeto QueryRunner para leer el objeto empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      //Step 3: Create a ResultSet Handler to handle Employee Beans
      ResultSetHandler<Employee> resultHandler 
         = new BeanHandler<Employee>(Employee.class);

      try {
         Employee emp = queryRunner.query(conn,
            "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
         //Display values
         System.out.print("ID: " + emp.getId());
         System.out.print(", Age: " + emp.getAge());
         System.out.print(", First: " + emp.getFirst());
         System.out.println(", Last: " + emp.getLast());
      } finally {
         DbUtils.close(conn);
      }              
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

ID: 103, Age: 28, First: Sumit, Last: Mittal

los org.apache.commons.dbutils.BeanListHandleres la implementación de la interfaz ResultSetHandler y es responsable de convertir las filas de ResultSet en una lista de Java Bean. Esta clase es segura para subprocesos.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.BeanListHandler:

public class BeanListHandler<T>
   extends Object implements ResultSetHandler<List<T>>

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Obtener la implementación de ResultSetHandler como objeto BeanListHandler.

  • Step 3 - Pase resultSetHandler al objeto QueryRunner y realice operaciones de base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo leer una lista de registros usando la clase BeanListHandler. Leeremos los registros disponibles en la tabla de empleados y los asignaremos a la lista de beans de empleado.

Sintaxis

List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);

Dónde,

  • resultHandler - Objeto BeanListHandler para mapear conjuntos de resultados a la lista de objetos Empleados.

  • queryRunner - Objeto QueryRunner para leer el objeto empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      //Step 3: Create a ResultSet Handler to handle List of Employee Beans
      ResultSetHandler<List<Employee>> resultHandler = new BeanListHandler<Employee>(Employee.class);

      try {
         List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
         for(Employee emp: empList ) {
            //Display values
            System.out.print("ID: " + emp.getId());
            System.out.print(", Age: " + emp.getAge());
            System.out.print(", First: " + emp.getFirst());
            System.out.println(", Last: " + emp.getLast());
         }           
      } finally {
         DbUtils.close(conn);
      }        
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal

los org.apache.commons.dbutils.ArrayListHandleres la implementación de la interfaz ResultSetHandler y es responsable de convertir las filas ResultSet en un objeto []. Esta clase es segura para subprocesos.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.ArrayListHandler:

public class ArrayListHandler
   extends AbstractListHandler<Object[]>

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Obtener la implementación de ResultSetHandler como objeto ArrayListHandler.

  • Step 3 - Pase resultSetHandler al objeto QueryRunner y realice operaciones de base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo leer una lista de registros usando la clase ArrayListHandler. Leeremos los registros disponibles en la tabla de empleados como objeto [].

Sintaxis

List<Object> result = queryRunner.query(conn, "SELECT * FROM employees", new ArrayListHandler());

Dónde,

  • resultHandler - Objeto ArrayListHandler para mapear conjuntos de resultados a la lista de objetos [].

  • queryRunner - Objeto QueryRunner para leer el objeto empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);        

      try {
         List<Object[]> result = queryRunner.query(conn, "SELECT * FROM employees"
            , new ArrayListHandler());  
         for(Object[] objects : result) {
            System.out.println(Arrays.toString(objects));
         }           
      } finally {
         DbUtils.close(conn);
      }        
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

[100, 18, Zara, Ali]
[101, 25, Mahnaz, Fatma]
[102, 30, Zaid, Khan]
[103, 28, Sumit, Mittal]

los org.apache.commons.dbutils.MapListHandleres la implementación de la interfaz ResultSetHandler y es responsable de convertir las filas de ResultSet en una lista de Mapas. Esta clase es segura para subprocesos.

Declaración de clase

A continuación se muestra la declaración de la clase org.apache.commons.dbutils.MapListHandler:

public class MapListHandler
   extends AbstractListHandler<Map<String,Object>>

Uso

  • Step 1 - Crea un objeto de conexión.

  • Step 2 - Obtener la implementación de ResultSetHandler como objeto MapListHandler.

  • Step 3 - Pase resultSetHandler al objeto QueryRunner y realice operaciones de base de datos.

Ejemplo

El siguiente ejemplo demostrará cómo leer una lista de registros usando la clase MapListHandler. Leeremos los registros disponibles en la tabla de empleados como una lista de mapas.

Sintaxis

List<Map<String, Object>> result = queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());

Dónde,

  • resultHandler - Objeto MapListHandler para asignar conjuntos de resultados a la lista de mapas.

  • queryRunner - Objeto QueryRunner para leer el objeto empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      
      //Step 1: Register JDBC driver
      DbUtils.loadDriver(JDBC_DRIVER);

      //Step 2: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);        

      try {
         List<Map<String, Object>> result = queryRunner.query(
            conn, "SELECT * FROM employees", new MapListHandler());      
         System.out.println(result);
      } finally {
         DbUtils.close(conn);
      }        
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

Connecting to database...
[{id=100, age=18, first=Zara, last=Ali}, 
{id=101, age=25, first=Mahnaz, last=Fatma}, 
{id=102, age=30, first=Zaid, last=Khan}, 
{id=103, age=33, first=Sumit, last=Mittal}]

Podemos crear nuestro propio controlador personalizado implementando la interfaz ResultSetHandler o extendiendo cualquiera de las implementaciones existentes de ResultSetHandler. En el ejemplo que se muestra a continuación, hemos creado un controlador personalizado, EmployeeHandler al extender la clase BeanHandler.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   private String name;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

A continuación se muestra el contenido de la EmployeeHandler.java archivo.

import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.handlers.BeanHandler;

public class EmployeeHandler extends BeanHandler<Employee> {

   public EmployeeHandler() {
      super(Employee.class);
   }

   @Override
   public Employee handle(ResultSet rs) throws SQLException {
      Employee employee = super.handle(rs);
      employee.setName(employee.getFirst() +", " + employee.getLast());
      return employee;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();
      DbUtils.loadDriver(JDBC_DRIVER);                 
      conn = DriverManager.getConnection(DB_URL, USER, PASS);        
      EmployeeHandler employeeHandler = new EmployeeHandler();

      try {
         Employee emp = queryRunner.query(conn,
         "SELECT * FROM employees WHERE first=?", employeeHandler, "Sumit");
         
         //Display values
         System.out.print("ID: " + emp.getId());
         System.out.print(", Age: " + emp.getAge());
         System.out.print(", Name: " + emp.getName());
      } finally {
         DbUtils.close(conn);
      }        
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

ID: 103, Age: 28, Name: Sumit, Mittal

En caso de que los nombres de las columnas en una tabla de base de datos y los nombres de los objetos javabean equivalentes no sean similares, entonces podemos mapearlos usando el objeto BasicRowProcessor personalizado. Vea el ejemplo a continuación.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   private String name;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

A continuación se muestra el contenido de la EmployeeHandler.java archivo.

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.BasicRowProcessor;

public class EmployeeHandler extends BeanHandler<Employee> {

   public EmployeeHandler() {
      super(Employee.class, new BasicRowProcessor(new BeanProcessor(mapColumnsToFields())));
   }

   @Override
   public Employee handle(ResultSet rs) throws SQLException {
      Employee employee = super.handle(rs);
      employee.setName(employee.getFirst() +", " + employee.getLast());
      return employee;
   }
   
   public static Map<String, String> mapColumnsToFields() {
      Map<String, String> columnsToFieldsMap = new HashMap<>();
      columnsToFieldsMap.put("ID", "id");
      columnsToFieldsMap.put("AGE", "age");        
      return columnsToFieldsMap;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";

   public static void main(String[] args) throws SQLException {
      Connection conn = null;
      QueryRunner queryRunner = new QueryRunner();      
      DbUtils.loadDriver(JDBC_DRIVER);                 
      conn = DriverManager.getConnection(DB_URL, USER, PASS);        
      EmployeeHandler employeeHandler = new EmployeeHandler();

      try {
         Employee emp = queryRunner.query(conn,
           "SELECT * FROM employees WHERE first=?", employeeHandler, "Sumit");
         
         //Display values
         System.out.print("ID: " + emp.getId());
         System.out.print(", Age: " + emp.getAge());
         System.out.print(", Name: " + emp.getName());
      } finally {
         DbUtils.close(conn);
      }              
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

ID: 103, Age: 28, Name: Sumit, Mittal

Hasta ahora, usamos el objeto de conexión mientras usamos QueryRunner. También podemos usar la fuente de datos sin problemas. El siguiente ejemplo demostrará cómo leer un registro usando Read query con la ayuda de QueryRunner y datasource. Leeremos un registro de la tabla de empleados.

Sintaxis

QueryRunner queryRunner = new QueryRunner( dataSource );
Employee emp = queryRunner.query("SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

Dónde,

  • dataSource - Objeto DataSource configurado.

  • resultHandler - Objeto ResultSetHandler para asignar el conjunto de resultados al objeto Employee.

  • queryRunner - Objeto QueryRunner para leer el objeto empleado de la base de datos.

Para comprender los conceptos mencionados anteriormente relacionados con DBUtils, escribamos un ejemplo que ejecutará una consulta de lectura. Para escribir nuestro ejemplo, creemos una aplicación de muestra.

Paso Descripción
1 Actualice el archivo MainApp.java creado en el capítulo DBUtils - Primera aplicación .
2 Compile y ejecute la aplicación como se explica a continuación.

A continuación se muestra el contenido de la Employee.java.

public class Employee {
   private int id;
   private int age;
   private String first;
   private String last;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getFirst() {
      return first;
   }
   public void setFirst(String first) {
      this.first = first;
   }
   public String getLast() {
      return last;
   }
   public void setLast(String last) {
      this.last = last;
   }
}

A continuación se muestra el contenido de la CustomDatasource.java.

import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;

public class CustomDataSource {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
   
   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";
   private static DataSource datasource;
   private static final BasicDataSource basicDataSource;

   static {
      basicDataSource = new BasicDataSource();
      basicDataSource.setDriverClassName(JDBC_DRIVER);
      basicDataSource.setUsername(USER);
      basicDataSource.setPassword(PASS);
      basicDataSource.setUrl(DB_URL);
   }

   public static DataSource getInstance() {
      return basicDataSource;
   }
}

A continuación se muestra el contenido de la MainApp.java archivo.

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
   public static void main(String[] args) throws SQLException {    
      
      DbUtils.loadDriver(JDBC_DRIVER);
      QueryRunner run = new QueryRunner(CustomDataSource.getInstance());
      ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);

      Employee emp = queryRunner.query("SELECT * FROM employees WHERE id=?",
         resultHandler, 103);
      
      //Display values
      System.out.print("ID: " + emp.getId());
      System.out.print(", Age: " + emp.getAge());
      System.out.print(", First: " + emp.getFirst());
      System.out.println(", Last: " + emp.getLast());
   }
}

Una vez que haya terminado de crear los archivos fuente, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje.

ID: 103, Age: 33, First: Sumit, Last: Mittal