Groovy - Database

Il modulo groovy-sql di Groovy fornisce un'astrazione di livello superiore rispetto all'attuale tecnologia JDBC di Java. L'API Groovy sql supporta un'ampia varietà di database, alcuni dei quali sono mostrati di seguito.

  • HSQLDB
  • Oracle
  • server SQL
  • MySQL
  • MongoDB

Nel nostro esempio, useremo MySQL DB come esempio. Per utilizzare MySQL con Groovy, la prima cosa da fare è scaricare il file jar jdbc di MySQL dal sito mysql.The format di MySQL verrà mostrato di seguito.

mysql-connector-java-5.1.38-bin

Quindi assicurati di aggiungere il file jar sopra al classpath nella tua workstation.

Connessione al database

Prima di connetterti a un database MySQL, assicurati di quanto segue:

  • Hai creato un database TESTDB.
  • Hai creato una tabella EMPLOYEE in TESTDB.
  • Questa tabella ha i campi FIRST_NAME, LAST_NAME, AGE, SEX e INCOME.
  • L'ID utente "testuser" e la password "test123" sono impostati per accedere a TESTDB.
  • Assicurati di aver scaricato il file jar mysql e di averlo aggiunto al tuo classpath.
  • Hai seguito il tutorial di MySQL per comprendere le basi di MySQL

Il seguente esempio mostra come connettersi al database 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()  
   } 
}

Durante l'esecuzione di questo script, produce il seguente risultato:

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

Creazione della tabella del database

Il passaggio successivo dopo la connessione al database è creare le tabelle nel nostro database. L'esempio seguente mostra come creare una tabella nel database utilizzando Groovy. Il metodo di esecuzione della classe Sql viene utilizzato per eseguire istruzioni sul database.

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

Inserisci operazione

È necessario quando si desidera creare i record in una tabella di database.

Esempio

Il seguente esempio inserirà un record nella tabella dei dipendenti. Il codice viene inserito in un blocco try catch in modo che, se il record viene eseguito correttamente, la transazione viene salvata nel database. Se la transazione fallisce, viene eseguito un rollback.

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

Supponiamo di voler selezionare solo determinate righe in base a un criterio. Il codice seguente mostra come aggiungere un segnaposto di parametro per cercare i valori. L'esempio precedente può anche essere scritto per accettare i parametri come mostrato nel codice seguente. Il simbolo $ viene utilizzato per definire un parametro che può quindi essere sostituito da valori quando viene eseguita l'istruzione sql.

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

Operazione READ

READ Operare su qualsiasi database significa prelevare alcune informazioni utili dal database. Una volta stabilita la connessione al database, sei pronto per eseguire una query in questo database.

L'operazione di lettura viene eseguita utilizzando il metodo eachRow della classe sql.

Sintassi

eachRow(GString gstring, Closure closure)

Esegue la query SQL specificata chiamando il Closure specificato con ogni riga del set di risultati.

Parameters

  • Gstring - L'istruzione sql che deve essere eseguita.

  • Closure- L'istruzione di chiusura per elaborare le righe recuperate dall'operazione di lettura. Esegue la query SQL specificata chiamando il Closure specificato con ogni riga del set di risultati.

Il seguente esempio di codice mostra come recuperare tutti i record dalla tabella Employee.

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

L'output del programma precedente sarebbe:

[Mac, Mohan, 20, M, 2000.0]

Operazione di aggiornamento

AGGIORNAMENTO Operare su qualsiasi database significa aggiornare uno o più record, già disponibili nel database. La seguente procedura aggiorna tutti i record che hanno SEX come "M". Qui, aumentiamo l'ETÀ di tutti i maschi di un anno.

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

Operazione DELETE

L'operazione DELETE è necessaria quando si desidera eliminare alcuni record dal database. Di seguito è riportata la procedura per eliminare tutti i record da DIPENDENTE di cui ETÀ è superiore a 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()
   } 
}

Esecuzione di transazioni

Le transazioni sono un meccanismo che garantisce la coerenza dei dati. Le transazioni hanno le seguenti quattro proprietà:

  • Atomicity - O una transazione viene completata o non accade nulla.

  • Consistency - Una transazione deve iniziare in uno stato coerente e lasciare il sistema in uno stato coerente.

  • Isolation - I risultati intermedi di una transazione non sono visibili al di fuori della transazione corrente.

  • Durability - Una volta che una transazione è stata confermata, gli effetti sono persistenti, anche dopo un errore di sistema.

Ecco un semplice esempio di come implementare le transazioni. Abbiamo già visto questo esempio dal nostro argomento precedente dell'operazione 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()

Commit Operation

L'operazione di commit è ciò che dice al database di procedere con l'operazione e finalizzare tutte le modifiche al database.

Nel nostro esempio sopra, ciò si ottiene con la seguente dichiarazione:

sql.commit()

Operazione di rollback

Se non sei soddisfatto di una o più modifiche e desideri ripristinarle completamente, utilizza il metodo di rollback. Nel nostro esempio sopra, ciò si ottiene con la seguente dichiarazione:

sql.rollback()

Disconnessione dei database

Per disconnettere la connessione al database, utilizzare il metodo di chiusura.

sql.close()