Apache Commons DBUtils - Guide rapide

La bibliothèque Apache Commons DbUtils est un ensemble assez restreint de classes, conçues pour faciliter le traitement des appels JDBC sans fuite de ressources et pour avoir un code plus propre. Le nettoyage des ressources JDBC étant assez fastidieux et sujet aux erreurs, les classes DBUtils aident à extraire le code de la plaque chauffante, afin que les développeurs puissent se concentrer uniquement sur les opérations liées à la base de données.

Avantages de DBUtils

Les avantages de l'utilisation d'Apache Commons DBUtils sont expliqués ci-dessous -

  • No Resource Leakage - Les classes DBUtils garantissent qu'aucune fuite de ressources ne se produit.

  • Clean & Clear code - Les classes DBUtils fournissent un code propre et clair pour effectuer les opérations de base de données sans avoir besoin d'écrire un code de nettoyage ou de prévention des fuites de ressources.

  • Bean Mapping - La classe DBUtils prend en charge le remplissage automatique des javabeans à partir d'un jeu de résultats.

Principes de conception DBUtils

Les principes de conception d'Apache Commons DBUtils sont les suivants:

  • Small - La bibliothèque DBUtils est de très petite taille avec moins de classes, de sorte qu'elle est facile à comprendre et à utiliser.

  • Transparent- La bibliothèque DBUtils ne fait pas beaucoup de travail dans les coulisses. Il prend simplement une requête et s'exécute.

  • Fast - Les classes de bibliothèque DBUtils ne créent pas beaucoup d'objets d'arrière-plan et sont assez rapides dans les exécutions d'opérations de base de données.

Pour commencer à développer avec DBUtils, vous devez configurer votre environnement DBUtils en suivant les étapes ci-dessous. Nous supposons que vous travaillez sur une plate-forme Windows.

Installez Java

Installez J2SE Development Kit 5.0 (JDK 5.0) à partir du site officiel de Java .

Assurez-vous que les variables d'environnement suivantes sont définies comme décrit ci-dessous -

  • JAVA_HOME - Cette variable d'environnement doit pointer vers le répertoire dans lequel vous avez installé le JDK, par exemple C: \ Program Files \ Java \ jdk1.5.0.

  • CLASSPATH - Cette variable d'environnement doit avoir des chemins d'accès appropriés, par exemple C: \ Program Files \ Java \ jdk1.5.0_20 \ jre \ lib.

  • PATH - Cette variable d'environnement doit pointer vers le bac JRE approprié, par exemple C: \ Program Files \ Java \ jre1.5.0_20 \ bin.

Il est possible que vous ayez déjà défini ces variables, mais juste pour vous assurer que voici comment vérifier.

  • Accédez au panneau de configuration et double-cliquez sur Système. Si vous êtes un utilisateur de Windows XP, il est possible que vous deviez ouvrir Performances et maintenance avant de voir l'icône Système.

  • Allez dans l'onglet Avancé et cliquez sur les variables d'environnement.

  • Vérifiez maintenant si toutes les variables mentionnées ci-dessus sont correctement définies.

Installer la base de données

La chose la plus importante dont vous aurez besoin, bien sûr, est une base de données en cours d'exécution avec une table que vous pouvez interroger et modifier.

Installez une base de données qui vous convient le mieux. Vous pouvez avoir beaucoup de choix et les plus courants sont -

  • MySQL DB:MySQL est une base de données open source. Vous pouvez le télécharger sur le site officiel de MySQL . Nous vous recommandons de télécharger l'installation complète de Windows.

    De plus, téléchargez et installez MySQL Administrator ainsi que MySQL Query Browser . Ce sont des outils basés sur l'interface graphique qui faciliteront votre développement.

    Enfin, téléchargez et décompressez MySQL Connector / J (le pilote MySQL JDBC) dans un répertoire pratique. Pour les besoins de ce didacticiel, nous supposerons que vous avez installé le pilote dans C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8.

    En conséquence, définissez la variable CLASSPATH sur C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8 \ mysql-connector-java-5.1.8-bin.jar. La version de votre pilote peut varier en fonction de votre installation.

  • PostgreSQL DB:PostgreSQL est une base de données open source. Vous pouvez le télécharger sur le site officiel de PostgreSQL .

    L'installation de Postgres contient un outil d'administration basé sur l'interface graphique appelé pgAdmin III. Les pilotes JDBC sont également inclus dans le cadre de l'installation.

  • Oracle DB- Oracle DB est une base de données commerciale vendue par Oracle. Nous supposons que vous disposez du support de distribution nécessaire pour l'installer.

    L'installation d'Oracle comprend un outil d'administration basé sur l'interface graphique appelé Enterprise Manager. Les pilotes JDBC sont également inclus dans le cadre de l'installation.

Installer les pilotes de base de données

Le dernier JDK inclut un pilote JDBC-ODBC Bridge qui rend la plupart des pilotes ODBC (Open Database Connectivity) disponibles aux programmeurs utilisant l'API JDBC.

Aujourd'hui, la plupart des fournisseurs de bases de données fournissent les pilotes JDBC appropriés avec l'installation de la base de données. Donc, vous ne devriez pas vous soucier de cette partie.

Définir les informations d'identification de la base de données

Pour ce tutoriel, nous allons utiliser la base de données MySQL. Lorsque vous installez l'une des bases de données ci-dessus, son ID administrateur est défini surroot et donne la possibilité de définir un mot de passe de votre choix.

À l'aide de l'ID racine et du mot de passe, vous pouvez soit créer un autre ID utilisateur et un autre mot de passe, soit utiliser un ID racine et un mot de passe pour votre application JDBC.

Il existe diverses opérations de base de données telles que la création et la suppression de bases de données, qui nécessiteraient un ID et un mot de passe administrateur.

Pour le reste du tutoriel JDBC, nous utiliserions MySQL Database avec username comme ID et password comme mot de passe.

Si vous ne disposez pas des privilèges suffisants pour créer de nouveaux utilisateurs, vous pouvez demander à votre administrateur de base de données (DBA) de créer un ID utilisateur et un mot de passe pour vous.

Créer une base de données

Pour créer le emp base de données, utilisez les étapes suivantes -

Étape 1

Ouvrir un Command Prompt et passez au répertoire d'installation comme suit -

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

Note: Le chemin vers mysqld.exepeut varier en fonction de l'emplacement d'installation de MySQL sur votre système. Vous pouvez également consulter la documentation sur la façon de démarrer et d'arrêter votre serveur de base de données.

Étape 2

Démarrez le serveur de base de données en exécutant la commande suivante, s'il n'est pas déjà en cours d'exécution.

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

Étape 3

Créer le emp base de données en exécutant la commande suivante -

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

Créer une table

Pour créer le Employees table dans la base de données emp, utilisez les étapes suivantes -

Étape 1

Ouvrir un Command Prompt et passez au répertoire d'installation comme suit -

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

Étape 2

Connectez-vous à la base de données comme suit -

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

Étape 3

Créer la table Employee comme suit -

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>

Créer des enregistrements de données

Enfin, vous créez quelques enregistrements dans la table Employee comme suit -

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>

Pour une compréhension complète de la base de données MySQL, étudiez le didacticiel MySQL .

Télécharger l'archive DBUtils de Commons

Téléchargez la dernière version du fichier jar Apache Common DBUtils à partir de commons-dbutils-1.7-bin.zip , du connecteur MySql 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 et Apache Commons Logging commons-logging-1.2-bin.zip . Au moment de la rédaction de ce tutoriel, nous avons téléchargé 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 et copié dans le dossier C: \> Apache.

OS Nom de l'archive
les fenêtres commons-dbutils-1.7-bin.zip
Linux commons-dbutils-1.7-bin.tar.gz
Mac commons-dbutils-1.7-bin.tar.gz

Définir l'environnement DBUtils commun Apache

Met le APACHE_HOMEvariable d'environnement pour pointer vers l'emplacement du répertoire de base où le fichier jar Apache est stocké sur votre machine. En supposant, nous avons extrait commons-dbutils-1.7-bin.zip dans le dossier Apache sur divers systèmes d'exploitation comme suit.

OS Production
les fenêtres Définissez la variable d'environnement APACHE_HOME sur C: \ Apache
Linux export APACHE_HOME = / usr / local / Apache
Mac export APACHE_HOME = / Bibliothèque / Apache

Définir la variable CLASSPATH

Met le CLASSPATHvariable d'environnement pour pointer vers l'emplacement du fichier jar Common IO. En supposant que vous ayez stocké commons-dbutils-1.7-bin.zip dans le dossier Apache sur différents systèmes d'exploitation comme suit.

OS Production
les fenêtres Définissez la variable d'environnement CLASSPATH sur% 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.

Vous êtes maintenant prêt à commencer à expérimenter avec DBUtils. Le chapitre suivant vous donne un exemple d'exemple sur la programmation DBUtils.

Ce chapitre fournit un exemple de création d'une application JDBC simple à l'aide de la bibliothèque DBUtils. Cela vous montrera comment ouvrir une connexion à une base de données, exécuter une requête SQL et afficher les résultats.

Toutes les étapes mentionnées dans cet exemple de modèle seront expliquées dans les chapitres suivants de ce didacticiel.

Création d'une application JDBC

Les six étapes suivantes sont impliquées dans la création d'une application JDBC -

  • Import the packages- Nécessite que vous incluiez les packages contenant les classes JDBC nécessaires à la programmation de la base de données. Le plus souvent, en utilisantimport java.sql.* suffira.

  • Register the JDBC driver - Nécessite que vous initialisiez un pilote, afin que vous puissiez ouvrir un canal de communication avec la base de données.

  • Open a connection - Nécessite l'utilisation du DriverManager.getConnection() pour créer un objet Connection, qui représente une connexion physique avec la base de données.

  • Execute a query - Nécessite l'utilisation d'un objet de type Statement pour créer et soumettre une instruction SQL à la base de données.

  • Extract data from result set - Nécessite que vous utilisiez le ResultSet.getXXX() méthode pour récupérer les données de l'ensemble de résultats.

  • Clean up the environment - Nécessite la fermeture explicite de toutes les ressources de la base de données plutôt que de s'appuyer sur le garbage collection de la JVM.

Exemple de code

Cet exemple d'exemple peut servir de modèle lorsque vous devez créer votre propre application JDBC à l'avenir.

Cet exemple de code a été écrit en fonction de l'environnement et de la configuration de la base de données effectuée dans le chapitre précédent.

Copiez et collez l'exemple suivant dans MainApp.java, compilez et exécutez comme suit -

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

Le programme est donné ci-dessous -

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;
   }
}

Maintenant, compilons l'exemple ci-dessus comme suit -

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

Quand tu cours MainApp, il produit le résultat suivant -

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

L'exemple suivant montre comment créer un enregistrement à l'aide de la requête Insertion à l'aide de DBUtils. Nous allons insérer un enregistrement dans la table des employés.

Syntaxe

La syntaxe pour créer une requête est donnée ci-dessous -

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

Où,

  • insertQuery - Insérer une requête ayant des espaces réservés.

  • queryRunner - Objet QueryRunner pour insérer l'objet employé dans la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête d'insertion. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant -

1 record(s) inserted.

L'exemple suivant montre comment lire un enregistrement à l'aide de la requête de lecture à l'aide de DBUtils. Nous lirons un enregistrement de la table des employés.

Syntaxe

La syntaxe de la requête de lecture est mentionnée ci-dessous -

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

Où,

  • resultHandler - Objet ResultSetHandler pour mapper le jeu de résultats à l'objet Employee.

  • queryRunner - Objet QueryRunner pour lire un objet employé à partir de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant:

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

L'exemple suivant montre comment mettre à jour un enregistrement à l'aide de la requête de mise à jour à l'aide de DBUtils. Nous mettrons à jour un enregistrement dans la table des employés.

Syntaxe

La syntaxe de la requête de mise à jour est la suivante -

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

Où,

  • updateQuery - Mettre à jour la requête ayant des espaces réservés.

  • queryRunner - Objet QueryRunner pour mettre à jour l'objet employé dans la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de mise à jour. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant -

1 record(s) updated.

L'exemple suivant montre comment supprimer un enregistrement à l'aide de la requête Supprimer à l'aide de DBUtils. Nous supprimerons un enregistrement dans la table des employés.

Syntaxe

La syntaxe de la requête de suppression est mentionnée ci-dessous -

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

Où,

  • deleteQuery - Requête DELETE ayant des espaces réservés.

  • queryRunner - Objet QueryRunner pour supprimer l'objet employé dans la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de suppression. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant -

1 record(s) deleted.

le org.apache.commons.dbutils.QueryRunnerclass est la classe centrale de la bibliothèque DBUtils. Il exécute des requêtes SQL avec des stratégies enfichables pour la gestion des ResultSets. Cette classe est thread-safe.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.QueryRunner -

public class QueryRunner
   extends AbstractQueryRunner

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Utilisez les méthodes d'objet QueryRunner pour effectuer des opérations de base de données.

Exemple

L'exemple suivant montre comment lire un enregistrement à l'aide de la classe QueryRunner. Nous lirons l'un des enregistrements disponibles dans le tableau des employés.

Syntaxe

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

Où,

  • resultHandler - Objet ResultSetHandler pour mapper le jeu de résultats à l'objet Employee.

  • queryRunner - Objet QueryRunner pour lire l'objet employé de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }        
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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

le org.apache.commons.dbutils.AsyncQueryRunnerLa classe aide à exécuter des requêtes SQL de longue durée avec prise en charge asynchrone. Cette classe est thread-safe. Cette classe prend en charge les mêmes méthodes que QueryRunner mais elle renvoie des objets Callable qui peuvent être utilisés plus tard pour récupérer le résultat.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.AsyncQueryRunner -

public class AsyncQueryRunner
   extends AbstractQueryRunner

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Utilisez les méthodes d'objet AsyncQueryRunner pour effectuer des opérations de base de données.

Exemple

L'exemple suivant montre comment mettre à jour un enregistrement à l'aide de la classe AsyncQueryRunner. Nous mettrons à jour l'un des enregistrements disponibles dans la table des employés.

Syntaxe

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

Où,

  • updateQuery - Mettre à jour la requête ayant des espaces réservés.

  • asyncQueryRunner - Objet asyncQueryRunner pour mettre à jour l'objet employé dans la base de données.

  • future - Objet futur pour récupérer le résultat plus tard.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de mise à jour en mode asynchrone. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }  
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

1 record(s) updated.

le org.apache.commons.dbutils.ResultSetHandler l'interface est responsable de la conversion des ResultSets en objets.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.ResultSetHandler -

public interface ResultSetHandler<T>

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Créer une implémentation de ResultSetHandler.

  • Step 3 - Passez resultSetHandler à l'objet QueryRunner et effectuez des opérations sur la base de données.

Exemple

L'exemple suivant montre comment mapper un enregistrement à l'aide de la classe ResultSetHandler. Nous lirons l'un des enregistrements disponibles dans la table des employés.

Syntaxe

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

Où,

  • resultHandler - Objet ResultSetHandler pour mapper le jeu de résultats à l'objet Employee.

  • queryRunner - Objet QueryRunner pour lire l'objet employé de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }              
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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

le org.apache.commons.dbutils.BeanHandlerest l'implémentation de l'interface ResultSetHandler et est responsable de la conversion de la première ligne ResultSet en JavaBean. Cette classe est thread-safe.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.BeanHandler -

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

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Obtenez l'implémentation de ResultSetHandler en tant qu'objet BeanHandler.

  • Step 3 - Passez resultSetHandler à l'objet QueryRunner et effectuez des opérations sur la base de données.

Exemple

L'exemple suivant montre comment lire un enregistrement à l'aide de la classe BeanHandler. Nous lirons l'un des enregistrements disponibles dans la table des employés et le mapperons au bean Employee.

Syntaxe

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

Où,

  • resultHandler - Objet BeanHandler pour mapper le jeu de résultats à l'objet Employee.

  • queryRunner - Objet QueryRunner pour lire l'objet employé de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }              
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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

le org.apache.commons.dbutils.BeanListHandlerest l'implémentation de l'interface ResultSetHandler et est responsable de la conversion des lignes ResultSet en liste de Java Bean. Cette classe est thread-safe.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.BeanListHandler -

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

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Obtenez l'implémentation de ResultSetHandler en tant qu'objet BeanListHandler.

  • Step 3 - Passez resultSetHandler à l'objet QueryRunner et effectuez des opérations sur la base de données.

Exemple

L'exemple suivant montre comment lire une liste d'enregistrements à l'aide de la classe BeanListHandler. Nous lirons les enregistrements disponibles dans la table des employés et les mapperons à la liste des beans Employee.

Syntaxe

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

Où,

  • resultHandler - Objet BeanListHandler pour mapper les ensembles de résultats à la liste des objets Employee.

  • queryRunner - Objet QueryRunner pour lire l'objet employé de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }        
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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

le org.apache.commons.dbutils.ArrayListHandlerest l'implémentation de l'interface ResultSetHandler et est responsable de la conversion des lignes ResultSet en un objet []. Cette classe est thread-safe.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.ArrayListHandler -

public class ArrayListHandler
   extends AbstractListHandler<Object[]>

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Obtenez l'implémentation de ResultSetHandler en tant qu'objet ArrayListHandler.

  • Step 3 - Passez resultSetHandler à l'objet QueryRunner et effectuez des opérations sur la base de données.

Exemple

L'exemple suivant montre comment lire une liste d'enregistrements à l'aide de la classe ArrayListHandler. Nous lirons les enregistrements disponibles dans la table des employés en tant qu'objet [].

Syntaxe

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

Où,

  • resultHandler - Objet ArrayListHandler pour mapper les ensembles de résultats à la liste d'objets [].

  • queryRunner - Objet QueryRunner pour lire l'objet employé de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }        
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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

le org.apache.commons.dbutils.MapListHandlerest l'implémentation de l'interface ResultSetHandler et est responsable de la conversion des lignes ResultSet en liste de cartes. Cette classe est thread-safe.

Déclaration de classe

Voici la déclaration de la classe org.apache.commons.dbutils.MapListHandler -

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

Usage

  • Step 1 - Créez un objet de connexion.

  • Step 2 - Obtenez l'implémentation de ResultSetHandler en tant qu'objet MapListHandler.

  • Step 3 - Passez resultSetHandler à l'objet QueryRunner et effectuez des opérations sur la base de données.

Exemple

L'exemple suivant montre comment lire une liste d'enregistrements à l'aide de la classe MapListHandler. Nous lirons les enregistrements disponibles dans la table des employés sous forme de liste de cartes.

Syntaxe

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

Où,

  • resultHandler - Objet MapListHandler pour mapper les ensembles de résultats à la liste des cartes.

  • queryRunner - Objet QueryRunner pour lire l'objet employé de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }        
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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}]

Nous pouvons créer notre propre gestionnaire personnalisé en implémentant l'interface ResultSetHandler ou en étendant l'une des implémentations existantes de ResultSetHandler. Dans l'exemple ci-dessous, nous avons créé un gestionnaire personnalisé, EmployeeHandler en étendant la classe BeanHandler.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la EmployeeHandler.java fichier.

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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }        
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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

Dans le cas où les noms de colonne dans une table de base de données et les noms d'objets javabean équivalents ne sont pas similaires, nous pouvons les mapper à l'aide d'un objet BasicRowProcessor personnalisé. Voir l'exemple ci-dessous.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu de la EmployeeHandler.java fichier.

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;
   }
}

Voici le contenu de la MainApp.java fichier.

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);
      }              
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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

Jusqu'à présent, nous avons utilisé un objet de connexion tout en utilisant QueryRunner. Nous pouvons également utiliser la source de données sans problème. L'exemple suivant montre comment lire un enregistrement à l'aide d'une requête de lecture à l'aide de QueryRunner et de la source de données. Nous allons lire un enregistrement de la table des employés.

Syntaxe

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

Où,

  • dataSource - Objet DataSource configuré.

  • resultHandler - Objet ResultSetHandler pour mapper le jeu de résultats à l'objet Employee.

  • queryRunner - Objet QueryRunner pour lire l'objet employé de la base de données.

Pour comprendre les concepts mentionnés ci-dessus liés à DBUtils, écrivons un exemple qui exécutera une requête de lecture. Pour écrire notre exemple, créons un exemple d'application.

Étape La description
1 Mettez à jour le fichier MainApp.java créé dans le chapitre DBUtils - Première application .
2 Compilez et exécutez l'application comme expliqué ci-dessous.

Voici le contenu 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;
   }
}

Voici le contenu 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;
   }
}

Voici le contenu de la MainApp.java fichier.

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());
   }
}

Une fois que vous avez terminé de créer les fichiers source, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant.

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