- Groovy 教程
- Groovy - 主页
- Groovy - 概述
- Groovy - 环境
- Groovy - 基本语法
- Groovy - 数据类型
- Groovy - 变量
- Groovy - 运算符
- Groovy - 循环
- Groovy - 决策
- Groovy - 方法
- Groovy - 文件 I/O
- Groovy - 可选
- Groovy - 数字
- Groovy - 字符串
- Groovy - 范围
- Groovy - 列表
- Groovy - 地图
- Groovy - 日期和时间
- Groovy - 正则表达式
- Groovy - 异常处理
- Groovy - 面向对象
- Groovy - 泛型
- Groovy - 特征
- Groovy - 闭包
- Groovy - 注释
- Groovy-XML
- Groovy-JMX
- Groovy - JSON
- Groovy-DSLS
- Groovy - 数据库
- Groovy - 构建者
- Groovy - 命令行
- Groovy - 单元测试
- Groovy - 模板引擎
- Groovy - 元对象编程
- Groovy 有用的资源
- Groovy - 快速指南
- Groovy - 有用的资源
- Groovy - 讨论
Groovy - 数据库
Groovy 的 groovy-sql 模块提供了对当前 Java 的 JDBC 技术的更高级别的抽象。Groovy sql API 支持多种数据库,其中一些如下所示。
- HSQL数据库
- 甲骨文
- SQL服务器
- MySQL
- MongoDB
在我们的示例中,我们将使用 MySQL DB 作为示例。为了将 MySQL 与 Groovy 一起使用,首先要做的是从 mysql 站点下载 MySQL jdbc jar 文件。MySQL 的格式如下所示。
mysql-connector-java-5.1.38-bin
然后确保将上述 jar 文件添加到工作站的类路径中。
数据库连接
在连接到 MySQL 数据库之前,请确保以下事项 -
- 您已经创建了一个数据库 TESTDB。
- 您已在 TESTDB 中创建了一个表 EMPLOYEE。
- 该表包含字段 FIRST_NAME、LAST_NAME、AGE、SEX 和 INCOME。
- 设置用户ID“testuser”和密码“test123”来访问TESTDB。
- 确保您已下载 mysql jar 文件并将该文件添加到类路径中。
- 您已完成 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 在数据库中创建表。Sql 类的execute 方法用于对数据库执行语句。
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 对任何数据库的操作意味着从数据库中获取一些有用的信息。建立数据库连接后,您就可以对该数据库进行查询了。
读取操作是通过使用sql类的eachRow方法来执行的。
句法
eachRow(GString gstring, Closure closure)
对结果集的每一行调用给定的 Closure 来执行给定的 SQL 查询。
参数
Gstring - 需要执行的sql语句。
Closure - 处理从读取操作中检索的行的闭包语句。对结果集的每一行调用给定的 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”的记录。在这里,我们将所有男性的 AGE 增加一岁。
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 中 AGE 大于 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() } }
执行交易
事务是一种保证数据一致性的机制。交易具有以下四个属性 -
Atomics性- 事务要么完成,要么什么也没有发生。
一致性- 事务必须以一致的状态开始并使系统处于一致的状态。
隔离- 事务的中间结果在当前事务之外不可见。
持久性- 一旦事务被提交,即使在系统发生故障之后,其影响也是持久的。
这是一个如何实现事务的简单示例。我们已经在之前的 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()
断开数据库连接
要断开数据库连接,请使用 close 方法。
sql.close()