Groovy - Base de données

Le module groovy-sql de Groovy fournit une abstraction de plus haut niveau par rapport à la technologie JDBC actuelle de Java. L'API Groovy sql prend en charge une grande variété de bases de données, dont certaines sont présentées ci-dessous.

  • HSQLDB
  • Oracle
  • serveur SQL
  • MySQL
  • MongoDB

Dans notre exemple, nous allons utiliser MySQL DB comme exemple. Pour utiliser MySQL avec Groovy, la première chose à faire est de télécharger le fichier jar MySQL jdbc depuis le site mysql.The format de MySQL sera montré ci-dessous.

mysql-connector-java-5.1.38-bin

Assurez-vous ensuite d'ajouter le fichier jar ci-dessus au chemin de classe de votre poste de travail.

Connexion à la base de données

Avant de vous connecter à une base de données MySQL, assurez-vous des points suivants -

  • Vous avez créé une base de données TESTDB.
  • Vous avez créé une table EMPLOYEE dans TESTDB.
  • Cette table contient les champs FIRST_NAME, LAST_NAME, AGE, SEX et INCOME.
  • L'ID utilisateur "testuser" et le mot de passe "test123" sont définis pour accéder à TESTDB.
  • Assurez-vous d'avoir téléchargé le fichier jar mysql et ajouté le fichier à votre chemin de classe.
  • Vous avez parcouru le didacticiel MySQL pour comprendre les bases de MySQL

L'exemple suivant montre comment se connecter à la base de données MySQL "TESTDB".

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 
         'testuser', 'test123', 'com.mysql.jdbc.Driver')
			
      // Executing the query SELECT VERSION which gets the version of the database
      // Also using the eachROW method to fetch the result from the database
   
      sql.eachRow('SELECT VERSION()'){ row ->
         println row[0]
      }
		
      sql.close()  
   } 
}

Lors de l'exécution de ce script, il produit le résultat suivant -

5.7.10-log 
The Sql.newInstance method is used to establish a connection to the database.

Création d'une table de base de données

La prochaine étape après la connexion à la base de données est de créer les tables dans notre base de données. L'exemple suivant montre comment créer une table dans la base de données à l'aide de Groovy. La méthode execute de la classe Sql est utilisée pour exécuter des instructions sur la base de données.

import java.sql.*; 
import groovy.sql.Sql 

class Example { 
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',  
         'test123', 'com.mysql.jdbc.Driver')
			
      def sqlstr = """CREATE TABLE EMPLOYEE ( 
         FIRST_NAME CHAR(20) NOT NULL,
         LAST_NAME CHAR(20),
         AGE INT,
         SEX CHAR(1),
         INCOME FLOAT )""" 
							
      sql.execute(sqlstr);
      sql.close() 
   } 
}

Insérer une opération

Il est nécessaire lorsque vous souhaitez créer vos enregistrements dans une table de base de données.

Exemple

L'exemple suivant insérera un enregistrement dans la table des employés. Le code est placé dans un bloc try catch de sorte que si l'enregistrement est exécuté avec succès, la transaction est validée dans la base de données. Si la transaction échoue, une annulation est effectuée.

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args) { 
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false
		
      def sqlstr = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" 
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed") 
      }catch(Exception ex) {
         sql.rollback()
         println("Transaction rollback") 
      }
		
      sql.close()
   } 
}

Supposons que vous vouliez simplement sélectionner certaines lignes en fonction d'un critère. Le code suivant montre comment vous pouvez ajouter un espace réservé de paramètre pour rechercher des valeurs. L'exemple ci-dessus peut également être écrit pour prendre des paramètres comme indiqué dans le code suivant. Le symbole $ est utilisé pour définir un paramètre qui peut ensuite être remplacé par des valeurs lorsque l'instruction sql est exécutée.

import java.sql.*; 
import groovy.sql.Sql
 
class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false  
      
      def firstname = "Mac"
      def lastname ="Mohan"
      def age = 20
      def sex = "M"
      def income = 2000  
		
      def sqlstr = "INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, 
         INCOME) VALUES " + "(${firstname}, ${lastname}, ${age}, ${sex}, ${income} )"
			
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed") 
      } catch(Exception ex) {
         sql.rollback()
         println("Transaction rollback")
      }
		
      sql.close()
   }
}

LIRE l'opération

LIRE L'opération sur n'importe quelle base de données signifie récupérer des informations utiles dans la base de données. Une fois notre connexion à la base de données établie, vous êtes prêt à effectuer une requête dans cette base de données.

L'opération de lecture est effectuée à l'aide de la méthode eachRow de la classe sql.

Syntaxe

eachRow(GString gstring, Closure closure)

Exécute la requête SQL donnée en appelant la fermeture donnée avec chaque ligne du jeu de résultats.

Parameters

  • Gstring - L'instruction sql qui doit être exécutée.

  • Closure- L'instruction de fermeture pour traiter les lignes extraites de l'opération de lecture. Exécute la requête SQL donnée en appelant la fermeture donnée avec chaque ligne du jeu de résultats.

L'exemple de code suivant montre comment récupérer tous les enregistrements de la table des employés.

import java.sql.*; 
import groovy.sql.Sql
 
class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')  
			
      sql.eachRow('select * from employee') {
         tp -> 
         println([tp.FIRST_NAME,tp.LAST_NAME,tp.age,tp.sex,tp.INCOME])
      }  
		
      sql.close()
   } 
}

La sortie du programme ci-dessus serait -

[Mac, Mohan, 20, M, 2000.0]

Opération de mise à jour

UPDATE L'opération sur n'importe quelle base de données signifie mettre à jour un ou plusieurs enregistrements, qui sont déjà disponibles dans la base de données. La procédure suivante met à jour tous les enregistrements ayant SEX comme «M». Ici, nous augmentons l'âge de tous les hommes d'un an.

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args){
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         '[email protected]', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false
      def sqlstr = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M'" 
	  
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed")
      }catch(Exception ex) {
         sql.rollback() 
         println("Transaction rollback")
      }
		
      sql.close()
   } 
}

Opération DELETE

L'opération DELETE est requise lorsque vous souhaitez supprimer certains enregistrements de votre base de données. Voici la procédure pour supprimer tous les enregistrements de EMPLOYÉ où AGE est supérieur à 20.

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         '[email protected]', 'com.mysql.jdbc.Driver')
			
      sql.connection.autoCommit = false
      def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
   
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed")
      }catch(Exception ex) {
         sql.rollback()
         println("Transaction rollback")
      }
   
      sql.close()
   } 
}

Effectuer des transactions

Les transactions sont un mécanisme qui garantit la cohérence des données. Les transactions ont les quatre propriétés suivantes -

  • Atomicity - Soit une transaction se termine, soit rien ne se passe du tout.

  • Consistency - Une transaction doit démarrer dans un état cohérent et laisser le système dans un état cohérent.

  • Isolation - Les résultats intermédiaires d'une transaction ne sont pas visibles en dehors de la transaction en cours.

  • Durability - Une fois qu'une transaction a été validée, les effets sont persistants, même après une panne du système.

Voici un exemple simple de mise en œuvre de transactions. Nous avons déjà vu cet exemple de notre rubrique précédente de l'opération DELETE.

def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20" 
 
try {
   sql.execute(sqlstr); 
   sql.commit()
   println("Successfully committed") 
}catch(Exception ex) {
   sql.rollback()
   println("Transaction rollback") 
} 
sql.close()

Opération de validation

L'opération de validation est ce qui indique à la base de données de poursuivre l'opération et de finaliser toutes les modifications apportées à la base de données.

Dans notre exemple ci-dessus, ceci est réalisé par la déclaration suivante -

sql.commit()

Opération de restauration

Si vous n'êtes pas satisfait d'une ou plusieurs des modifications et que vous souhaitez annuler complètement ces modifications, utilisez la méthode de restauration. Dans notre exemple ci-dessus, ceci est réalisé par la déclaration suivante -

sql.rollback()

Déconnexion des bases de données

Pour déconnecter la connexion à la base de données, utilisez la méthode close.

sql.close()