Модуль Groovy-sql Groovy обеспечивает абстракцию более высокого уровня по сравнению с текущей технологией JDBC Java. Groovy SQL API поддерживает широкий спектр баз данных, некоторые из которых показаны ниже.
- HSQLDB
- оракул
- SQL Server
- MySQL
- MongoDB
В нашем примере мы будем использовать MySQL DB в качестве примера. Чтобы использовать MySQL с Groovy, в первую очередь необходимо загрузить jar-файл MySQL jdbc с сайта mysql. Форма циновки MySQL будет показана ниже.
mysql-connector-java-5.1.38-bin
Затем убедитесь, что добавили вышеупомянутый jar-файл в classpath на вашей рабочей станции.
Подключение к базе данных
Перед подключением к базе данных 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() } }
ЧИТАЙТЕ Операцию
Чтение Операция с любой базой данных означает получение некоторой полезной информации из базы данных. Как только наше соединение с базой данных установлено, вы готовы сделать запрос в эту базу данных.
Операция чтения выполняется с использованием метода eachRow класса sql.
Синтаксис
eachRow(GString gstring, Closure closure)
Выполняет заданный SQL-запрос, вызывая данное Закрытие для каждой строки набора результатов.
параметры
-
Gstring — оператор sql, который необходимо выполнить.
-
Закрытие — оператор закрытия для обработки строк, извлеченных из операции чтения. Выполняет заданный SQL-запрос, вызывая данное Закрытие для каждой строки набора результатов.
Gstring — оператор sql, который необходимо выполнить.
Закрытие — оператор закрытия для обработки строк, извлеченных из операции чтения. Выполняет заданный 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]
Операция обновления
ОБНОВЛЕНИЕ Операция в любой базе данных означает обновление одной или нескольких записей, которые уже доступны в базе данных. Следующая процедура обновляет все записи, имеющие 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 требуется, когда вы хотите удалить некоторые записи из вашей базы данных. Ниже приведена процедура удаления всех записей из EMPLOYEE, где возраст больше 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() } }
Выполнение транзакций
Транзакции — это механизм, который обеспечивает согласованность данных. Транзакции имеют следующие четыре свойства —
-
Атомарность — либо транзакция завершена, либо ничего не происходит вообще.
-
Согласованность — транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.
-
Изоляция — промежуточные результаты транзакции не видны за пределами текущей транзакции.
-
Долговечность — после совершения транзакции последствия сохраняются даже после сбоя системы.
Атомарность — либо транзакция завершена, либо ничего не происходит вообще.
Согласованность — транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.
Изоляция — промежуточные результаты транзакции не видны за пределами текущей транзакции.
Долговечность — после совершения транзакции последствия сохраняются даже после сбоя системы.
Вот простой пример реализации транзакций. Мы уже видели этот пример из нашей предыдущей темы об операции 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 — это то, что сообщает базе данных, что нужно продолжить операцию и завершить все изменения в базе данных.
В нашем примере выше это достигается с помощью следующего утверждения —
sql.commit()
Операция отката
Если вы не удовлетворены одним или несколькими изменениями и хотите полностью отменить эти изменения, используйте метод отката. В нашем примере выше это достигается с помощью следующего утверждения —
sql.rollback()
Отключение баз данных
Чтобы отключить соединение с базой данных, используйте метод close.