Groovy - База данных

Модуль Groovy-sql Groovy обеспечивает абстракцию более высокого уровня по сравнению с текущей технологией Java JDBC. API-интерфейс Groovy sql поддерживает широкий спектр баз данных, некоторые из которых показаны ниже.

  • HSQLDB
  • Oracle
  • SQL Server
  • MySQL
  • MongoDB

В нашем примере мы будем использовать MySQL DB в качестве примера. Чтобы использовать MySQL с Groovy, первое, что нужно сделать, - это загрузить jar-файл MySQL jdbc с сайта mysql.The forМат MySQL будет показан ниже.

mysql-connector-java-5.1.38-bin

Затем убедитесь, что вы добавили указанный выше файл jar в путь к классам на вашей рабочей станции.

Подключение к базе данных

Перед подключением к базе данных MySQL убедитесь в следующем:

  • Вы создали базу данных TESTDB.
  • Вы создали таблицу EMPLOYEE в TESTDB.
  • В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.
  • Идентификатор пользователя testuser и пароль test123 установлены для доступа к TESTDB.
  • Убедитесь, что вы скачали файл jar mysql и добавили его в путь к классам.
  • Вы прошли обучение MySQL, чтобы понять основы MySQL.

В следующем примере показано, как подключиться к базе данных 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()  
   } 
}

При запуске этого скрипта он дает следующий результат -

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

Создание таблицы базы данных

Следующим шагом после подключения к базе данных является создание таблиц в нашей базе данных. В следующем примере показано, как создать таблицу в базе данных с помощью Groovy. Метод execute класса 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')
			
      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() 
   } 
}

Вставить операцию

Это требуется, когда вы хотите создать свои записи в таблице базы данных.

пример

В следующем примере будет вставлена ​​запись в таблицу сотрудников. Код помещается в блок try catch, поэтому в случае успешного выполнения записи транзакция фиксируется в базе данных. В случае сбоя транзакции выполняется откат.

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

Предположим, вы хотите просто выбрать определенные строки на основе критерия. В следующем коде показано, как добавить заполнитель параметра для поиска значений. Вышеупомянутый пример также может быть записан для приема параметров, как показано в следующем коде. Символ $ используется для определения параметра, который затем может быть заменен значениями при выполнении оператора 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()
   }
}

ПРОЧИТАТЬ операцию

READ Операция с любой базой данных означает получение некоторой полезной информации из базы данных. Как только наша база данных будет установлена, вы готовы сделать запрос в эту базу данных.

Операция чтения выполняется с помощью метода eachRow класса sql.

Синтаксис

eachRow(GString gstring, Closure closure)

Выполняет данный запрос SQL, вызывая данное замыкание с каждой строкой набора результатов.

Parameters

  • Gstring - Оператор sql, который необходимо выполнить.

  • Closure- Оператор закрытия для обработки строк, полученных в результате операции чтения. Выполняет данный запрос 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.eachRow('select * from employee') {
         tp -> 
         println([tp.FIRST_NAME,tp.LAST_NAME,tp.age,tp.sex,tp.INCOME])
      }  
		
      sql.close()
   } 
}

Результатом вышеупомянутой программы будет -

[Mac, Mohan, 20, M, 2000.0]

Операция обновления

UPDATE Операция с любой базой данных означает обновление одной или нескольких записей, которые уже доступны в базе данных. Следующая процедура обновляет все записи, имеющие SEX как «M». Здесь мы увеличиваем ВОЗРАСТ всех мужчин на один год.

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 требуется, если вы хотите удалить некоторые записи из своей базы данных. Ниже приводится процедура удаления всех записей из СОТРУДНИКА, если ВОЗРАСТ больше 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', 
         '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()
   } 
}

Выполнение транзакций

Транзакции - это механизм, обеспечивающий согласованность данных. Транзакции имеют следующие четыре свойства -

  • Atomicity - Либо транзакция завершается, либо вообще ничего не происходит.

  • Consistency - Транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.

  • Isolation - Промежуточные результаты транзакции не видны вне текущей транзакции.

  • Durability - После фиксации транзакции последствия сохраняются даже после сбоя системы.

Вот простой пример того, как проводить транзакции. Мы уже видели этот пример из нашего предыдущего раздела об операции 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()

Подтвердить операцию

Операция фиксации - это то, что сообщает базе данных продолжить операцию и завершить все изменения в базе данных.

В нашем примере выше это достигается следующим утверждением -

sql.commit()

Откат операции

Если вас не устраивают одно или несколько изменений и вы хотите полностью отменить эти изменения, используйте метод отката. В нашем примере выше это достигается следующим утверждением -

sql.rollback()

Отключение баз данных

Чтобы отключить соединение с БД, используйте метод закрытия.

sql.close()