Groovy - Base de datos
El módulo groovy-sql de Groovy proporciona una abstracción de nivel superior sobre la tecnología JDBC de Java actual. Groovy sql API admite una amplia variedad de bases de datos, algunas de las cuales se muestran a continuación.
- HSQLDB
- Oracle
- servidor SQL
- MySQL
- MongoDB
En nuestro ejemplo, usaremos MySQL DB como ejemplo. Para usar MySQL con Groovy, lo primero que debe hacer es descargar el archivo jar jdbc de MySQL desde el sitio mysql.The format de MySQL se mostrará a continuación.
mysql-connector-java-5.1.38-bin
Luego, asegúrese de agregar el archivo jar anterior a la ruta de clase en su estación de trabajo.
Conexión de base de datos
Antes de conectarse a una base de datos MySQL, asegúrese de lo siguiente:
- Ha creado una base de datos TESTDB.
- Ha creado una tabla EMPLOYEE en TESTDB.
- Esta tabla tiene campos FIRST_NAME, APELLIDO, EDAD, SEXO e INGRESOS.
- El ID de usuario "testuser" y la contraseña "test123" están configurados para acceder a TESTDB.
- Asegúrese de haber descargado el archivo jar mysql y agregado el archivo a su classpath.
- Ha seguido el tutorial de MySQL para comprender los conceptos básicos de MySQL
El siguiente ejemplo muestra cómo conectarse con la base de datos 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()
}
}
Mientras ejecuta este script, produce el siguiente resultado:
5.7.10-log
The Sql.newInstance method is used to establish a connection to the database.
Crear tabla de base de datos
El siguiente paso después de conectarse a la base de datos es crear las tablas en nuestra base de datos. El siguiente ejemplo muestra cómo crear una tabla en la base de datos usando Groovy. El método de ejecución de la clase Sql se utiliza para ejecutar declaraciones en la base de datos.
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()
}
}
Insertar operación
Es necesario cuando desea crear sus registros en una tabla de base de datos.
Ejemplo
El siguiente ejemplo insertará un registro en la tabla de empleados. El código se coloca en un bloque try catch para que, si el registro se ejecuta correctamente, la transacción se confirme en la base de datos. Si la transacción falla, se realiza una reversión.
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()
}
}
Supongamos que solo desea seleccionar ciertas filas según un criterio. El siguiente código muestra cómo puede agregar un marcador de posición de parámetro para buscar valores. El ejemplo anterior también se puede escribir para incluir parámetros como se muestra en el siguiente código. El símbolo $ se usa para definir un parámetro que luego puede ser reemplazado por valores cuando se ejecuta la instrucción 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()
}
}
Operación LEER
READ Operar en cualquier base de datos significa obtener información útil de la base de datos. Una vez que se establezca nuestra conexión de base de datos, estará listo para realizar una consulta en esta base de datos.
La operación de lectura se realiza utilizando el método eachRow de la clase sql.
Sintaxis
eachRow(GString gstring, Closure closure)
Realiza la consulta SQL dada llamando al Closure dado con cada fila del conjunto de resultados.
Parameters
Gstring - La instrucción sql que debe ejecutarse.
Closure- La declaración de cierre para procesar las filas recuperadas de la operación de lectura. Realiza la consulta SQL dada llamando al Closure dado con cada fila del conjunto de resultados.
El siguiente ejemplo de código muestra cómo recuperar todos los registros de la tabla de empleados.
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()
}
}
La salida del programa anterior sería:
[Mac, Mohan, 20, M, 2000.0]
Operación de actualización
ACTUALIZAR Operar en cualquier base de datos significa actualizar uno o más registros, que ya están disponibles en la base de datos. El siguiente procedimiento actualiza todos los registros que tienen SEXO como 'M'. Aquí, aumentamos la EDAD de todos los machos en un año.
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',
'[email protected]', '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()
}
}
Operación DELETE
La operación DELETE es necesaria cuando desea eliminar algunos registros de su base de datos. A continuación se muestra el procedimiento para eliminar todos los registros de EMPLEADO donde la EDAD es mayor de 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',
'[email protected]', '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()
}
}
Realización de transacciones
Las transacciones son un mecanismo que garantiza la coherencia de los datos. Las transacciones tienen las siguientes cuatro propiedades:
Atomicity - O se completa una transacción o no ocurre nada.
Consistency - Una transacción debe comenzar en un estado consistente y dejar el sistema en un estado consistente.
Isolation - Los resultados intermedios de una transacción no son visibles fuera de la transacción actual.
Durability - Una vez que se ha comprometido una transacción, los efectos son persistentes, incluso después de una falla del sistema.
A continuación, se muestra un ejemplo sencillo de cómo implementar transacciones. Ya hemos visto este ejemplo de nuestro tema anterior de la operación 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()
Confirmar operación
La operación de confirmación es lo que le dice a la base de datos que proceda con la operación y finalice todos los cambios en la base de datos.
En nuestro ejemplo anterior, esto se logra mediante la siguiente declaración:
sql.commit()
Operación de reversión
Si no está satisfecho con uno o más de los cambios y desea revertirlos por completo, utilice el método de reversión. En nuestro ejemplo anterior, esto se logra mediante la siguiente declaración:
sql.rollback()
Desconectar bases de datos
Para desconectar la conexión de la base de datos, utilice el método de cierre.
sql.close()