Groovy - baza danych

Moduł groovy-sql firmy Groovy zapewnia wyższą abstrakcję w porównaniu z obecną technologią JDBC języka Java. Groovy sql API obsługuje szeroką gamę baz danych, z których niektóre są pokazane poniżej.

  • HSQLDB
  • Oracle
  • SQL Server
  • MySQL
  • MongoDB

W naszym przykładzie użyjemy MySQL DB jako przykładu. Aby używać MySQL z Groovy, pierwszą rzeczą do zrobienia jest pobranie pliku jar MySQL jdbc ze strony mysql.The format z MySQL zostanie pokazany poniżej.

mysql-connector-java-5.1.38-bin

Następnie dodaj powyższy plik jar do ścieżki klas na stacji roboczej.

Połączenie z bazą danych

Przed połączeniem się z bazą danych MySQL upewnij się, że:

  • Utworzyłeś bazę danych TESTDB.
  • Utworzyłeś tabelę PRACOWNIK w TESTDB.
  • Ta tabela zawiera pola FIRST_NAME, LAST_NAME, AGE, SEX i INCOME.
  • ID użytkownika „testuser” i hasło „test123” są ustawione na dostęp do bazy danych TESTDB.
  • Upewnij się, że pobrałeś plik jar mysql i dodałeś go do ścieżki klas.
  • Przeszedłeś przez samouczek MySQL, aby zrozumieć podstawy MySQL

Poniższy przykład pokazuje, jak połączyć się z bazą danych 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()  
   } 
}

Podczas uruchamiania tego skryptu generuje następujący wynik -

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

Tworzenie tabeli bazy danych

Kolejnym krokiem po połączeniu się z bazą danych jest utworzenie tabel w naszej bazie. Poniższy przykład pokazuje, jak utworzyć tabelę w bazie danych przy użyciu Groovy. Metoda execute klasy Sql służy do wykonywania instrukcji w bazie danych.

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

Operacja wstawiania

Jest to wymagane, gdy chcesz utworzyć rekordy w tabeli bazy danych.

Przykład

Poniższy przykład wstawi rekord do tabeli pracownika. Kod jest umieszczany w bloku try catch, więc jeśli rekord zostanie wykonany pomyślnie, transakcja zostanie zatwierdzona w bazie danych. Jeśli transakcja się nie powiedzie, następuje wycofanie.

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

Załóżmy, że chcesz po prostu wybrać określone wiersze na podstawie kryteriów. Poniższy kod pokazuje, jak można dodać element zastępczy parametru w celu wyszukiwania wartości. Powyższy przykład można również napisać tak, aby przyjmował parametry, jak pokazano w poniższym kodzie. Symbol $ służy do definiowania parametru, który można następnie zastąpić wartościami podczas wykonywania instrukcji 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()
   }
}

Operacja READ

READ Operacja na dowolnej bazie danych oznacza pobranie przydatnych informacji z bazy danych. Po nawiązaniu połączenia z bazą danych możesz wykonać zapytanie do tej bazy danych.

Operacja odczytu jest wykonywana przy użyciu metody eachRow klasy sql.

Składnia

eachRow(GString gstring, Closure closure)

Wykonuje dane zapytanie SQL wywołujące dane Closure z każdym wierszem zestawu wyników.

Parameters

  • Gstring - instrukcja sql, która ma zostać wykonana.

  • Closure- Instrukcja zamknięcia do przetwarzania wierszy pobranych z operacji odczytu. Wykonuje dane zapytanie SQL wywołujące dane Closure z każdym wierszem zestawu wyników.

Poniższy przykład kodu pokazuje, jak pobrać wszystkie rekordy z tabeli pracowników.

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

Wynik z powyższego programu byłby -

[Mac, Mohan, 20, M, 2000.0]

Operacja aktualizacji

UPDATE Operacja na dowolnej bazie danych oznacza aktualizację jednego lub więcej rekordów, które są już dostępne w bazie danych. Poniższa procedura aktualizuje wszystkie rekordy mające PŁEĆ jako „M”. Tutaj zwiększamy WIEK wszystkich samców o jeden rok.

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

Operacja USUŃ

Operacja DELETE jest wymagana, gdy chcesz usunąć niektóre rekordy z bazy danych. Poniżej znajduje się procedura usuwania wszystkich zapisów od PRACOWNIKA w wieku powyżej 20 lat.

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

Wykonywanie transakcji

Transakcje to mechanizm zapewniający spójność danych. Transakcje mają następujące cztery właściwości -

  • Atomicity - Albo transakcja zostaje zakończona, albo nic się nie dzieje.

  • Consistency - Transakcja musi rozpocząć się w stanie zgodnym i pozostawić system w stanie zgodnym.

  • Isolation - Pośrednie wyniki transakcji nie są widoczne poza bieżącą transakcją.

  • Durability - Po zatwierdzeniu transakcji efekty są trwałe, nawet po awarii systemu.

Oto prosty przykład realizacji transakcji. Widzieliśmy już ten przykład z naszego poprzedniego tematu operacji 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()

Zatwierdź operację

Operacja zatwierdzenia nakazuje bazie danych kontynuowanie operacji i sfinalizowanie wszystkich zmian w bazie danych.

W naszym powyższym przykładzie osiąga się to poprzez następujące stwierdzenie -

sql.commit()

Operacja wycofywania zmian

Jeśli nie jesteś zadowolony z co najmniej jednej zmiany i chcesz całkowicie cofnąć te zmiany, użyj metody wycofywania zmian. W naszym powyższym przykładzie osiąga się to poprzez następujące stwierdzenie -

sql.rollback()

Odłączanie baz danych

Aby rozłączyć połączenie z bazą danych, użyj metody close.

sql.close()