Mysql
 sql >> Base de données >  >> RDS >> Mysql

Exemple d'instruction JDBC - Insertion, mise à jour, suppression par lots

Lorsque vous avez beaucoup de commandes sql d'insertion ou de mise à jour à exécuter, vous pouvez utiliser java.sql.Statement addBatch(String sqlCmd) pour les regrouper, puis exécutez java.sql.Statement executeBatch() pour valider toutes les commandes sur le serveur de base de données en une seule fois.

Remarques sur l'opération par lots JDBC

  1. Améliorez les performances de communication de la base de données car les commandes sql ont été envoyées au serveur de base de données par groupe, cela peut réduire le coût de la communication entre le client et le serveur.
  2. L'opération par lots est une fonctionnalité du serveur de base de données cible, elle n'est pas requise par le pilote jdbc. Vous pouvez utiliser Connection.getMetaData().supportsBatchUpdates() pour vérifier si la base de données de destination prend en charge la mise à jour par lots ou non.
  3. L'opération par lots peut être utilisée non seulement pour insérer une commande, mais également pour mettre à jour et supprimer des commandes.
  4. Vous devez utiliser java.sql.Connection.setAutoCommit(false) pour désactiver la validation automatique de la base de données avant d'exécuter des actions de base de données par lots.
  5. Après avoir exécuté les opérations par lots, utilisez java.sql.Connection.commit() pour valider les opérations sur le serveur de base de données en une seule fois.
  6. Vous devez exécuter java.sql.Connection.setAutoCommit(true) pour activer la validation automatique pour les opérations de base de données ultérieures.
  7. Le SQL par lots peut exploiter plusieurs tables.

Extraits de code SQL par lots

 /* Récupère l'objet de connexion. */ Connection dbConn =this.getMySqlConnection(ip, port, dbName, userName, password); /* Désactiver la validation automatique. */ dbConn.setAutoCommit(false); /* Obtient l'objet d'instruction. */ Instruction stmt =dbConn.createStatement(); /* Ajouter sql par lot, chaque sql peut exploiter une table différente. */ stmt.addBatch(sql1); stmt.addBatch(sql2); stmt.addBatch(sql3); stmt.addBatch(sql4); stmt.addBatch(sql5); stmt.addBatch(sql6); /* Exécute le batch sql vers le serveur de base de données. */ int updateCountArr[] =stmt.executeBatch(); /* N'oubliez pas de valider. */ dbConn.commit(); /* Activer la validation automatique pour une opération ultérieure de la base de données. */ dbConn.setAutoCommit(true);

Exemples de codes complets

L'exemple ci-dessous utilisera la base de données mysql, insèrera et mettra à jour les données dans la table enseignant et étudiant par lots. Vous pouvez vous référer à Comment utiliser JDBC pour connecter la base de données MySql pour en savoir plus sur JDBC MySQL.

 public void testBatchUpdate(String ip, int port, String dbName, String userName, String password) { String sqlArr[] =new String[6]; sqlArr[0] ="insert into student values('richard','[email protected]')" ; sqlArr[1] ="insert into student values('jerry','[email protected]')" ; sqlArr[2] ="insérer dans les valeurs de l'enseignant (nom, e-mail) ('tom','[email protected]')" ; sqlArr[3] ="mise à jour de l'adresse e-mail de l'enseignant ='[email protected]' où nom ='hello'" ; sqlArr[4] ="insert into teacher(name, email) values('song','[email protected]')" ; sqlArr[5] ="insérer dans les valeurs de l'enseignant (nom, e-mail) ('jerry','[email protected]')" ; this.executeBatchSql(ip, port, dbName, userName, password, sqlArr); } /* Batch exécute des commandes d'insertion, de mise à jour et de suppression. */ public void executeBatchSql(String ip, int port, String dbName, String userName, String password, String sqlArr[]) { /* Déclare la connexion et l'objet d'instruction. */ Connexion dbConn =null ; Instruction stmt =null ; try { /* Récupère l'objet de connexion. */ dbConn =this.getMySqlConnection(ip, port, dbName, userName, password); /* Vérifie si cette base de données prend en charge la mise à jour par lots ou non. */ booléen supportBatch =dbConn.getMetaData().supportsBatchUpdates(); if(supportBatch) { System.out.println("Cette base de données prend en charge la mise à jour par lots."); }else { System.out.println("Cette base de données ne prend pas en charge la mise à jour par lots."); } /* Désactiver la validation automatique. */ dbConn.setAutoCommit(false); /* Obtient l'objet d'instruction. */ stmt =dbConn.createStatement(); if(sqlArr!=null) { int len ​​=sqlArr.length; for(int i=0;i 0) { /* Le tableau de retour enregistre chaque nombre de lignes mis à jour par la commande. */ int updateCountArr[] =stmt.executeBatch(); dbConn.commit(); dbConn.setAutoCommit(true); System.out.println("Exécutez le lot sql avec succès. "); int updateLength =updateCountArr.length ; for(int j=0 ; j  

Source :

  1. [ID de téléchargement = ”2551″]