课程表

Groovy课程

工具箱
速查手册

Groovy 数据库

当前位置:免费教程 » Java相关 » Groovy

Groovy的groovy-sql模块提供了比当前Java的JDBC技术更高级的抽象。Groovy sql API支持各种各样的数据库,其中一些如下所示。

  • HSQLDB
  • Oracle
  • SQL Server
  • MySQL
  • MongoDB

在我们的示例中,我们将使用MySQL DB作为示例。为了使用MySQL与Groovy,首先要做的是从mysql站点下载MySQL jdbc jar文件。 MySQL的格式如下所示。

  1. 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”。

  1. import java.sql.*;
  2. import groovy.sql.Sql
  3.  
  4. class Example {
  5. static void main(String[] args) {
  6. // Creating a connection to the database
  7. def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB',
  8. 'testuser', 'test123', 'com.mysql.jdbc.Driver')
  9. // Executing the query SELECT VERSION which gets the version of the database
  10. // Also using the eachROW method to fetch the result from the database
  11. sql.eachRow('SELECT VERSION()'){ row ->
  12. println row[0]
  13. }
  14. sql.close()
  15. }
  16. }

运行此脚本时,会产生以下结果 -

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

创建数据库表

连接到数据库后的下一步是在数据库中创建表。以下示例显示如何使用Groovy在数据库中创建表。Sql类的execute方法用于对数据库执行语句。

  1. import java.sql.*;
  2. import groovy.sql.Sql
  3.  
  4. class Example {
  5. static void main(String[] args) {
  6. // Creating a connection to the database
  7. def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
  8. 'test123', 'com.mysql.jdbc.Driver')
  9. def sqlstr = """CREATE TABLE EMPLOYEE (
  10. FIRST_NAME CHAR(20) NOT NULL,
  11. LAST_NAME CHAR(20),
  12. AGE INT,
  13. SEX CHAR(1),
  14. INCOME FLOAT )"""
  15. sql.execute(sqlstr);
  16. sql.close()
  17. }
  18. }

插入操作

当您要将记录创建到数据库表中时需要。

例子

以下示例将在employee表中插入一条记录。代码放置在try catch块中,因此如果记录成功执行,事务将提交到数据库。如果事务失败,则执行回滚。

  1. import java.sql.*;
  2. import groovy.sql.Sql
  3.  
  4. class Example {
  5. static void main(String[] args) {
  6. // Creating a connection to the database
  7. def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
  8. 'test123', 'com.mysql.jdbc.Driver')
  9. sql.connection.autoCommit = false
  10. def sqlstr = """INSERT INTO EMPLOYEE(FIRST_NAME,
  11. LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
  12. try {
  13. sql.execute(sqlstr);
  14. sql.commit()
  15. println("Successfully committed")
  16. }catch(Exception ex) {
  17. sql.rollback()
  18. println("Transaction rollback")
  19. }
  20. sql.close()
  21. }
  22. }

假设您只想根据条件选择某些行。以下代码显示如何添加参数占位符以搜索值。上面的例子也可以写成参数,如下面的代码所示。 $符号用于定义一个参数,然后可以在执行sql语句时将其替换为值。

  1. import java.sql.*;
  2. import groovy.sql.Sql
  3. class Example {
  4. static void main(String[] args) {
  5. // Creating a connection to the database
  6. def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
  7. 'test123', 'com.mysql.jdbc.Driver')
  8. sql.connection.autoCommit = false
  9. def firstname = "Mac"
  10. def lastname ="Mohan"
  11. def age = 20
  12. def sex = "M"
  13. def income = 2000
  14. def sqlstr = "INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX,
  15. INCOME) VALUES " + "(${firstname}, ${lastname}, ${age}, ${sex}, ${income} )"
  16. try {
  17. sql.execute(sqlstr);
  18. sql.commit()
  19. println("Successfully committed")
  20. } catch(Exception ex) {
  21. sql.rollback()
  22. println("Transaction rollback")
  23. }
  24. sql.close()
  25. }
  26. }

读操作

读操作上的任何数据库是指从数据库中获取一些有用的信息。一旦我们的数据库建立连接,您就可以进行查询到这个数据库中。

读出操作是通过使用SQL类的eachRow方法进行。

句法

  1. eachRow(GString gstring, Closure closure)

执行给定的SQL查询调用,结果集的每一行给出闭幕。

参数

  • GString的 -这需要执行的SQL语句。

  • 封闭 -封闭语句来处理来自读操作retrived行。执行给定的SQL查询调用,结果集的每一行给出闭幕。

下面的代码示例演示了如何来从雇员表中的所有记录。

  1. import java.sql.*;
  2. import groovy.sql.Sql
  3. class Example {
  4. static void main(String[] args) {
  5. // Creating a connection to the database
  6. def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
  7. 'test123', 'com.mysql.jdbc.Driver')
  8. sql.eachRow('select * from employee') {
  9. tp ->
  10. println([tp.FIRST_NAME,tp.LAST_NAME,tp.age,tp.sex,tp.INCOME])
  11. }
  12. sql.close()
  13. }
  14. }

从上面的程序的输出将是 -

  1. [Mac, Mohan, 20, M, 2000.0]

更新操作

任何数据库上进行更新操作手段来更新一个或多个记录,这已经在数据库中。下面的过程更新过性生活为“M”的所有记录。在这里,我们一岁增加所有男子的年龄。

  1. import java.sql.*;
  2. import groovy.sql.Sql
  3.  
  4. class Example {
  5. static void main(String[] args){
  6. // Creating a connection to the database
  7. def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
  8. 'test@123', 'com.mysql.jdbc.Driver')
  9. sql.connection.autoCommit = false
  10. def sqlstr = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M'"
  11. try {
  12. sql.execute(sqlstr);
  13. sql.commit()
  14. println("Successfully committed")
  15. }catch(Exception ex) {
  16. sql.rollback()
  17. println("Transaction rollback")
  18. }
  19. sql.close()
  20. }
  21. }

删除操作

当你想从数据库中删除一些记录DELETE操作是必需的。以下是从哪里EMPLOYEE年龄超过20删除所有记录的过程。

  1. import java.sql.*;
  2. import groovy.sql.Sql
  3.  
  4. class Example {
  5. static void main(String[] args) {
  6. // Creating a connection to the database
  7. def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
  8. 'test@123', 'com.mysql.jdbc.Driver')
  9. sql.connection.autoCommit = false
  10. def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
  11. try {
  12. sql.execute(sqlstr);
  13. sql.commit()
  14. println("Successfully committed")
  15. }catch(Exception ex) {
  16. sql.rollback()
  17. println("Transaction rollback")
  18. }
  19. sql.close()
  20. }
  21. }

执行事务

事务是确保数据一致性的机制。交易有以下四个属性 -

  • 原子性 -事务完成或根本没有任何事情发生。

  • 一致性 -事务必须以一致的状态开始,并使系统保持一致状态。

  • 隔离 -事务的中间结果在当前事务外部不可见。

  • 持久性 -一旦事务提交,即使系统发生故障,影响仍然持续。

这里是一个如何实现事务的简单示例。我们已经从DELETE操作的上一个主题中看到了这个示例。

  1. def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
  2. try {
  3. sql.execute(sqlstr);
  4. sql.commit()
  5. println("Successfully committed")
  6. }catch(Exception ex) {
  7. sql.rollback()
  8. println("Transaction rollback")
  9. }
  10. sql.close()

提交操作

提交操作是告诉数据库继续操作并完成对数据库的所有更改。

在我们的上述例子中,这是通过下面的语句实现 -

  1. sql.commit()

回滚操作

如果您对一个或多个更改不满意,并希望完全还原这些更改,请使用回滚方法。在我们上面的例子中,这是通过以下语句实现的:

  1. sql.rollback()

断开数据库

要断开数据库连接,使用Close方法。

  1. sql.close()
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号