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