Groovy - Datenbank

Das Groovy-SQL-Modul von Groovy bietet eine übergeordnete Abstraktion gegenüber der aktuellen JDBC-Technologie von Java. Die Groovy SQL-API unterstützt eine Vielzahl von Datenbanken, von denen einige unten aufgeführt sind.

  • HSQLDB
  • Oracle
  • SQL Server
  • MySQL
  • MongoDB

In unserem Beispiel verwenden wir MySQL DB als Beispiel. Um MySQL mit Groovy zu verwenden, müssen Sie zunächst die MySQL-JDBC-JAR-Datei von der MySQL-Site herunterladen.The forDie Matte von MySQL wird unten gezeigt.

mysql-connector-java-5.1.38-bin

Stellen Sie dann sicher, dass Sie die obige JAR-Datei zum Klassenpfad in Ihrer Workstation hinzufügen.

Datenbankverbindung

Stellen Sie vor dem Herstellen einer Verbindung zu einer MySQL-Datenbank Folgendes sicher:

  • Sie haben eine Datenbank TESTDB erstellt.
  • Sie haben in TESTDB eine Tabelle EMPLOYEE erstellt.
  • Diese Tabelle enthält die Felder FIRST_NAME, LAST_NAME, AGE, SEX und INCOME.
  • Die Benutzer-ID "testuser" und das Kennwort "test123" sind für den Zugriff auf TESTDB festgelegt.
  • Stellen Sie sicher, dass Sie die MySQL-JAR-Datei heruntergeladen und Ihrem Klassenpfad hinzugefügt haben.
  • Sie haben das MySQL-Tutorial durchgearbeitet, um die MySQL-Grundlagen zu verstehen

Das folgende Beispiel zeigt, wie eine Verbindung mit der MySQL-Datenbank "TESTDB" hergestellt wird.

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

Beim Ausführen dieses Skripts wird das folgende Ergebnis erzielt:

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

Erstellen einer Datenbanktabelle

Der nächste Schritt nach dem Herstellen einer Verbindung zur Datenbank besteht darin, die Tabellen in unserer Datenbank zu erstellen. Das folgende Beispiel zeigt, wie Sie mit Groovy eine Tabelle in der Datenbank erstellen. Die execute-Methode der Sql-Klasse wird verwendet, um Anweisungen für die Datenbank auszuführen.

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

Operation einfügen

Dies ist erforderlich, wenn Sie Ihre Datensätze in einer Datenbanktabelle erstellen möchten.

Beispiel

Im folgenden Beispiel wird ein Datensatz in die Mitarbeitertabelle eingefügt. Der Code wird in einen Try-Catch-Block eingefügt, sodass bei erfolgreicher Ausführung des Datensatzes die Transaktion in die Datenbank übernommen wird. Wenn die Transaktion fehlschlägt, wird ein Rollback durchgeführt.

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

Angenommen, Sie möchten nur bestimmte Zeilen anhand eines Kriteriums auswählen. Der folgende Codeshow zeigt, wie Sie einen Parameterplatzhalter hinzufügen können, um nach Werten zu suchen. Das obige Beispiel kann auch geschrieben werden, um Parameter aufzunehmen, wie im folgenden Code gezeigt. Das $ -Symbol wird verwendet, um einen Parameter zu definieren, der dann bei der Ausführung der SQL-Anweisung durch Werte ersetzt werden kann.

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

LESEN Betrieb

READ Operation für eine beliebige Datenbank bedeutet, einige nützliche Informationen aus der Datenbank abzurufen. Sobald unsere Datenbankverbindung hergestellt ist, können Sie eine Abfrage in dieser Datenbank durchführen.

Die Leseoperation wird unter Verwendung der eachRow-Methode der SQL-Klasse ausgeführt.

Syntax

eachRow(GString gstring, Closure closure)

Führt die angegebene SQL-Abfrage durch, wobei der angegebene Abschluss mit jeder Zeile der Ergebnismenge aufgerufen wird.

Parameters

  • Gstring - Die SQL-Anweisung, die ausgeführt werden muss.

  • Closure- Die Closure-Anweisung zum Verarbeiten der Zeilen, die aus der Leseoperation abgerufen wurden. Führt die angegebene SQL-Abfrage durch, wobei der angegebene Abschluss mit jeder Zeile der Ergebnismenge aufgerufen wird.

Das folgende Codebeispiel zeigt, wie alle Datensätze aus der Mitarbeitertabelle abgerufen werden.

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

Die Ausgabe des obigen Programms wäre -

[Mac, Mohan, 20, M, 2000.0]

Vorgang aktualisieren

UPDATE Operation für eine beliebige Datenbank bedeutet, einen oder mehrere Datensätze zu aktualisieren, die bereits in der Datenbank verfügbar sind. Das folgende Verfahren aktualisiert alle Datensätze mit SEX als 'M'. Hier erhöhen wir das ALTER aller Männchen um ein Jahr.

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', 
         'test@123', '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()
   } 
}

DELETE-Betrieb

Der Vorgang LÖSCHEN ist erforderlich, wenn Sie einige Datensätze aus Ihrer Datenbank löschen möchten. Im Folgenden wird beschrieben, wie Sie alle Datensätze aus EMPLOYEE löschen, wenn das Alter mehr als 20 Jahre beträgt.

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', 
         'test@123', '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()
   } 
}

Transaktionen durchführen

Transaktionen sind ein Mechanismus, der die Datenkonsistenz gewährleistet. Transaktionen haben die folgenden vier Eigenschaften:

  • Atomicity - Entweder wird eine Transaktion abgeschlossen oder es passiert überhaupt nichts.

  • Consistency - Eine Transaktion muss in einem konsistenten Zustand beginnen und das System in einem konsistenten Zustand belassen.

  • Isolation - Zwischenergebnisse einer Transaktion sind außerhalb der aktuellen Transaktion nicht sichtbar.

  • Durability - Sobald eine Transaktion festgeschrieben wurde, bleiben die Auswirkungen auch nach einem Systemausfall bestehen.

Hier ist ein einfaches Beispiel für die Implementierung von Transaktionen. Wir haben dieses Beispiel bereits aus unserem vorherigen Thema der DELETE-Operation gesehen.

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

Operation festschreiben

Die Festschreibungsoperation weist die Datenbank an, mit der Operation fortzufahren und alle Änderungen an der Datenbank abzuschließen.

In unserem obigen Beispiel wird dies durch die folgende Aussage erreicht:

sql.commit()

Rollback-Betrieb

Wenn Sie mit einer oder mehreren Änderungen nicht zufrieden sind und diese Änderungen vollständig zurücksetzen möchten, verwenden Sie die Rollback-Methode. In unserem obigen Beispiel wird dies durch die folgende Aussage erreicht:

sql.rollback()

Trennen von Datenbanken

Verwenden Sie die Methode close, um die Datenbankverbindung zu trennen.

sql.close()