Groovy语言

1 Groovy介绍

1.1 Groovy介绍

Groovy是一种编程语言,它结合了Java的强大功能和脚本语言的简洁性。它具有动态类型、易读的语法、与Java的紧密集成、脚本编程能力、强大的闭包等特点。

1.2 Groovy SQL介绍

Groovy SQL是 Groovy 编程语言的一部分,用于简化与数据库的交互。它提供了一种更易用的方式来执行 SQL 查询和操作数据库,允许开发者使用 Groovy 的简洁语法进行数据库操作,而无需编写繁琐的JDBC 代码。Groovy SQL 支持动态类型、内置数据库连接池、参数化査询、自动结果集处理和异常处理简化等特性,使数据库操作更加方便和高效。这使得 Groovy SQL成为在 Groovy 项目中处理数据库任务的有力工具。

2 环境准备

  • Java Development Kit (JDK):你需要安装适当版本的JavaJDK,建议使用JDK8或更高版本。Groovy在 Java 平台上运行,因此需要 Java 环境。

  • Groovy 安装:你需要安装 Groovy。你可以通过 SDKMAN 或官方网站下载并安装 Groovy。确保将Groovy 的二进制文件路径添加到系统的环境变量中。

  • 操作系统支持:Groovy 可以在多种操作系统上运行,包括Windows、macOS 和各种 Linux 发行版

  • 内存和处理器要求:要顺利运行 Groovy 环境,系统需要有足够的内存和处理器资源。确保系统满足Groovy 运行的最低硬件要求。

Groovy下载: JFrog

image-20240228235735360

解压:

image-20240228235842651

配置环境变量(同jdk):

image-20240229000206081

注意:安装Groovy需要安装jdk并配置好jdk的环境变量,如果不安装jdk就会出现以下问题

ERROR: No java.exe found at: C:\Program Files\Java\jdk1.8.0_131\bin\java.exe
Please set the JAVA_HOME variable in your environment
to match the location of your Java installation.

查看安装是否成功与安装的版本

image-20240228235352357

3 Groovy基本语法

3.1 变量和数据类型

  • 定义变量时不需要显式声明类型,Groovy 会自动推断。(弱类型)

  • 支持基本数据类型(整数、浮点数、布尔值)、字符串和列表等数据类型。

def name = "Alice"
def name = """Alice""”
def age = 30

3.2 控制流

  • 支持条件语句(if、else if、else)、循环(for、while)

  • 与 Java 类似的控制流语法。

使用if判断:

if(age < 18){
	println("未成年")
} else {
    println("成年")
}

使用for循环:

//使用 for 循环遍历一个整数范围
for(int i in 1..5){
    println("iteration: $i")
}
   	 
// 使用 for 循环遍历列表
def colors =['red','green', 'blue']
for(color in colors){
    println("color: $color")
}

// 使用 for 循环遍历列表
def persons =[name:'Alice', age: 30]
for(person in persons){
	println("key: $person.key")
    println("value: $person.value")
}

使用while循环:

def count = 0
while(count < 5){
	println("Count: $count")
    count++
}
//使用 do-while 循环
count =0
do {
	println("Count: $count")
	count++
} while(count<5)

3.3 字符串处理

  • 使用双引号定义字符串,支持字符串插值
  • 使用GString可以在字符串中嵌入变量
def name = "Alice"
def greeting = "Hello, $name!"
//输出 Hello,Alice!

3.4 列表和映射

  • 支持列表(List)和映射(Map)的定义和操作
def colors = ['red','green','blue']
def person = [name: 'Alice',age: 30]

3.5 方法和闭包

  • 定义方法时使用 def 关键字,

  • 支持闭包,可以将函数赋值给变量或作为参数传递。

def greet(name){
	return "Hello, $name!"
}    
def add = { a, b ->a+ b }
// 调用
greet(‘小明’);
add(13);

3.6 类和对象

  • 创建类时使用class关键字
  • 使用new关键字创建对象
  • Groovy支持属性(不需要显式的getter和setter方法)
class Person {
	def name
	def age
}    
def person = new Person(name: "Alice", age: 30)
// 获取属性
println person.name;
println person.age;

3.7 异常处理

  • 使用 try-catch 块捕获异常。
  • 异常处理与 Java 类似。
try {
	//可能会抛出异常的代码
} catch(Exception e){
	// 异常处理代码
}

3.8 导入库

  • 使用import关键字导入其他类或库
import java.util.ArrayList;

3.9 JSON处理

  • 使用JsonBuilder和JsonSlurper
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

def data = ["res_code": "2999","res_desc": "fail!"];

// JSON字符串
def str = new JsonBuilder(data).tostring();
println str;

// JSON对象
def json = new JsonSlurper().parseText(str);
println json;

4 Groovy SQL调用方式

Groovy SQL 提供了一种简洁而强大的方式来执行 SQL 查询和与数据库交互。以下是 Groovy SQL 的基本语法和用法:

4.1 导入库

首先,需要导入Groovy SQL相关的库,通常使用groovy.sql.Sql;

import groovy.sql.Sql

4.2 创建数据库连接

使用Sql类创建数据库连接,并指定数据库的连接信息:

@Grab(group='org.codehaus.groovy.modules', module='groovy-sql', version='3.41.0')

import groovy.sql.Sql

def url = 'jdbc:mysql://localhost:3306/mydatabase'
def user = 'your_username'
def password = 'your_password'
//使用Sql类创建数据库连接,并指定数据库的连接信息:
def db = Sql.newInstance(url, user, password, 'com.mysql.cj.jdbc.Driver')

db.eachRow('SELECT * FROM my_table') { row ->
    println "Column 1: ${row.column1}, Column 2: ${row.column2}"
}

db.close()

4.3 执行查询

使用eachRow、firstRow或rows方法执行查询,处理查询结果:

//定义变量,变量值为执行的sq1
def selectSql ="SELECT * FROM My_Table";
//获取这么定义,区别:使用三个引号定义的变量是可以换行的
def selectSql="""SELECT * 
FROM My_Table""";

// 类似存储过程中的for-loop,cc代表查询的每一行
db.eachRow(selectsql,{
	CC ->
	// 输出cc的内容
	println cc;
});
// 返回第一行,默认加了rownum =1
def result=db.firstRow(selectsql);
// 返回查询结果为一个集合
def list = db.rows(selectsql);

4.4 参数化查询

可以进行参数化查询,防止SQL注入:

//定义变量,变量值为执行的sq1
def selecSql = "SELECT * FROM My_Table WHERE NAME = ? AND AGE = ?",
//类似存储过程中的for-1oop,cc代表查询的每一行
db.eachRow(selectsql,["小明","12"]{
CC ->
// 输出cc的内容
println cc;
});
//返回第一行,默认加了rownum=1
def result = db.firstRow(selectSql,["小白","15"]);
//返回查询结果为一个集合
def list = db.rows(selectSql,["小陈","12"]);

4.5 插入数据

执行插入数据的操作:

//定义变量,变量值为执行的sq1
def insertSql = "INSERT INTO My_Table (ID,NAME,AGE) VALUES (?,?,?);"
// 插入数据
db.executeInsert(insertSql,[1,"小白",12]);
/ 或者
db.execute(insertSql,[1,"小白",12]);

4.6 更新数据

执行更新数据的操作:

//定义变量,变量值为执行的sq1
def updateSql = "UPDATE My_Table T SET T.ID = '1’ WHERE T.NAME = ? AND T.AGE = ?"
// 更新数据
tbcsa.executeUpdate(updateSql,["小白","11"]);
// 或者
tbcsa.execute(updateSql,["小李","13"]);

4.7 删除数据

//定义变量,变量值为执行的sq1
def deleteSql = "DELETE FROM My_Table T WHERE T.ID = ? AND T.NAME = ?",
// 删除数据
db.executeUpdate(deleteSql,["1","小白"]);
//或者
db.execute(deleteSql,["1","小李"]);

4.8 调用存储过程

在Groovy中调用存储过程可以通过Sql库实现。下面是一个简单的示例代码,演示如何连接到数据库并调用存储过程:

groovyCopy Code@Grab(group='org.codehaus.groovy.modules', module='groovy-sql', version='3.41.0')

import groovy.sql.Sql

def url = 'jdbc:mysql://localhost:3306/mydatabase'
def user = 'your_username'
def password = 'your_password'

def sql = Sql.newInstance(url, user, password, 'com.mysql.cj.jdbc.Driver')

def callStoredProcedure = "{call my_stored_procedure(?,?)}"
def params = [param1Value, param2Value] // 传递给存储过程的参数值

sql.withTransaction {
    sql.call(callStoredProcedure, params) { result ->
        result.each { row ->
            println row
        }
    }
}

sql.close()

在上面的代码中:

  • 替换 jdbc:mysql://localhost:3306/mydatabaseyour_usernameyour_password 为你的数据库连接信息。
  • com.mysql.cj.jdbc.Driver 是 MySQL 数据库的驱动程序,如果你使用其他数据库,需要替换为相应的驱动程序类名。
  • my_stored_procedure 是你要调用的存储过程名称,可以根据实际情况进行修改。
  • param1Valueparam2Value 是传递给存储过程的参数值,根据存储过程定义进行设置。
  • withTransaction 方法用于确保在执行存储过程时开启事务,并在代码块执行完毕后自动提交事务或回滚。

4.9 批处理

在Groovy中,你可以使用Sql库来执行批处理SQL语句。下面是一个简单的示例代码,演示如何通过Groovy的Sql库执行批处理:

groovyCopy Code@Grab(group='org.codehaus.groovy.modules', module='groovy-sql', version='3.41.0')

import groovy.sql.Sql

def url = 'jdbc:mysql://localhost:3306/mydatabase'
def user = 'your_username'
def password = 'your_password'

def sql = Sql.newInstance(url, user, password, 'com.mysql.cj.jdbc.Driver')

sql.withBatch { batch ->
    batch.addBatch("INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2')")
    batch.addBatch("UPDATE my_table SET column1 = 'new_value' WHERE column2 = 'some_value'")
    batch.addBatch("DELETE FROM my_table WHERE column1 = 'old_value'")
    
    int[] updateCounts = batch.executeBatch()
    
    println "Updated ${updateCounts.sum()} rows"
}

sql.close()

在上面的代码中:

  • 替换 jdbc:mysql://localhost:3306/mydatabaseyour_usernameyour_password 为你的数据库连接信息。
  • com.mysql.cj.jdbc.Driver 是 MySQL 数据库的驱动程序,如果你使用其他数据库,需要替换为相应的驱动程序类名。
  • withBatch 闭包中,你可以使用 addBatch 方法来添加要执行的SQL语句。
  • executeBatch 方法用于执行批处理中的所有SQL语句,并返回更新计数数组。

4.10 事务提交

db.commit();

4.11 关闭连接

db.close();

5 执行命令

  • 执行
groovy test.groovy
  • 执行带参数
groovy test.groovy param1 param2
  • 指定编码
groovy --encoding=GBK test.groovy
//或
groovy -Dfile.encoding=GBK test.groovy
  • 指定堆内存大小
export JAVA_0PTS="-Xms256m -Xmx1024m
groovy test.groovy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/444440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

你应该打好你的日志,起码避免被甩锅

大家好&#xff0c;我是蓝胖子,相信大家或多或少都有这样的经历&#xff0c;当你负责的功能出现线上问题时&#xff0c;领导第一时间便是找到你询问原因&#xff0c;然而有时问题的根因或许不在你这儿&#xff0c;只是这个功能或许依赖了第三方或者内部其他部门&#xff0c;这个…

Spring Boot 自动装配的原理!!!

SpringBootApplication SpringBootConfiguration&#xff1a;标识启动类是一个IOC容器的配置类 EnableAutoConfiguration&#xff1a; AutoConfigurationPackage&#xff1a;扫描启动类所在包及子包中所有的组件&#xff0c;生…

Mint_21.3 drawing-area和goocanvas的FB笔记(七)

FreeBASIC gfx 基本 graphics 绘图 8、ScreenControl与屏幕窗口位置设置 FreeBASIC通过自建屏幕窗口摆脱了原来的屏幕模式限制&#xff0c;既然是窗口&#xff0c;在屏幕坐标中就有它的位置。ScreenControl GET_WINDOW_POS x, y 获取窗口左上角的x, y位置&#xff1b;ScreenC…

小程序网页view多行文本超出隐藏或显示省略号

实现效果&#xff1a; 限制两行&#xff0c;超出即显示省略号 实现&#xff1a;话不多说&#xff0c;展示代码 关键代码 .box{ width:100rpx; overflow:hidden; text-overflow: ellipsis;//超出省略号 display:-webkit-box; -webkit-line-clamp: 2;//显…

【数学】【组合数学】1830. 使字符串有序的最少操作次数

作者推荐 视频算法专题 本博文涉及知识点 数学 组合数学 LeetCode1830. 使字符串有序的最少操作次数 给你一个字符串 s &#xff08;下标从 0 开始&#xff09;。你需要对 s 执行以下操作直到它变为一个有序字符串&#xff1a; 找到 最大下标 i &#xff0c;使得 1 < i…

Android UI自动化测试框架—SoloPi简介

1、UI自动化测试简介 软件测试简介 ​软件测试是伴随着软件开发一同诞生的&#xff0c;随着软件规模大型化&#xff0c;结构复杂化&#xff0c;软件测试也从最初的简单“调试”&#xff0c;发展到当今的自动化测试。 ​ 自动化测试是什么呢&#xff1f;自动化测试是把以人为…

用C语言执行SQLite3的gcc编译细节

错误信息&#xff1a; /tmp/cc3joSwp.o: In function main: execSqlite.c:(.text0x100): undefined reference to sqlite3_open execSqlite.c:(.text0x16c): undefined reference to sqlite3_exec execSqlite.c:(.text0x174): undefined reference to sqlite3_close execSqlit…

从零开始:神经网络(1)——神经元和梯度下降

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 一. 神经网络 1. 神经网络的发展 先了解一下神经网络发展的历程。从单层神经网络&#xff08;感知器&#xff09;开…

349. 两个数组的交集

349. 两个数组的交集 力扣题目链接(opens new window) 题意&#xff1a;给定两个数组&#xff0c;编写一个函数来计算它们的交集。 说明&#xff1a; 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 对于看某个元素是否出现在一个集合中的 &#xff0c;…

STM32利用标准库的方式输出PWM(proteus仿真)

首先打开proteus仿真软件&#xff0c;绘制电路图&#xff1a; 其中示波器的添加很简单的&#xff0c;看图&#xff1a; 再来看看咱们最后程序的效果&#xff1a; 下面就是程序代码了&#xff0c;新建两个文件PWM.c和PWM.h文件&#xff0c;所属关系如图&#xff1a; 整个的编程思…

Redis 内存的优化

目录 前言 Redis 的内存碎片问题 判断Redis 内存碎片 如何清理内存碎片&#xff1f; 前言 我想讲一下怎么提高Redis 内存的利用率&#xff0c;redis 的数据是保存在内存中。对内存的利用率低&#xff0c;意味着存的数据很少&#xff0c;并不意味着就没有内存了&#xff0c…

如何在Mapbox GL中处理大的GEOJSON文件

Mapbox GL可以将 GeoJSON 数据由客户端(Web 浏览器或移动设备)即时转换为 Mapbox 矢量切片进行显示和处理。本文的目的是教大家如何有效加载和渲染大型 GeoJSON 源,并优化渲染显示速度,增强用户体验,减少客户端卡顿问题。本文以Mapbox 为例,至于其它框架原理大致相同,可…

中国联通云联网在多元行业应用中的核心地位与价值体现

在全球化浪潮与数字化转型的时代背景下&#xff0c;中国联通积极响应市场需求&#xff0c;推出以云联网为核心的全球化智能组网解决方案&#xff0c;突破地理限制&#xff0c;为各行业提供高效、安全、灵活的网络服务。该方案不仅涵盖传统的通信连接&#xff0c;更是深入到能源…

复盘-excel

excel-选列没有用&#xff0c;选小标题才可以 将簇状柱形图放置在一个新表上##### excel: 添加数据模型时&#xff0c;要通过套用表格格式与外部断开连接 透视分析2010年人数未解决(第四套&#xff09; 通过日期显示星期几 判断星期几 因为前面已经通过星期六&#xff0c…

【AcWing】蓝桥杯集训每日一题Day1|二分|差分|503.借教室(C++)

503. 借教室 503. 借教室 - AcWing题库难度&#xff1a;简单时/空限制&#xff1a;1s / 128MB总通过数&#xff1a;8052总尝试数&#xff1a;26311来源&#xff1a;NOIP2012提高组算法标签二分差分 题目内容 在大学期间&#xff0c;经常需要租借教室。 大到院系举办活动&…

Linux上安装torch-geometric(pyg)1.7.2踩坑记录

重点&#xff1a;1.一定要在创建虚拟环境的时候设置好python版本。2.一定要先确定使用1.X还是2.X的pyg库&#xff0c;二者不兼容。3.一定要将cuda、torch、pyg之间的版本对应好。所以&#xff0c;先确定pyg版本&#xff0c;再确定torch和cuda的版本。 结论&#xff1a;如果在u…

【解读】OWASP大语言模型应用程序十大风险

OWASP大型语言模型应用程序前十名项目旨在教育开发人员、设计师、架构师、经理和组织在部署和管理大型语言模型&#xff08;LLM&#xff09;时的潜在安全风险。该项目提供了LLM应用程序中常见的十大最关键漏洞的列表&#xff0c;强调了它们的潜在影响、易利用性和在现实应用程序…

基本计算器II

文章目录 题目解析算法解析算法模拟第一步 第二步第三步第四步第五步第六步最后一步 代码 题目解析 题目链接 我们先来看一下题目这个题目的意思很明确就是给你一个算数式让你计算结果并返回并且给了很多辅助条件来帮助你。 算法解析 那么我们来看看这个题目有哪些做法&…

Qt 定时器事件

文章目录 1 定时器事件1.1 界面布局1.2 关联信号槽1.3 重写timerEvent1.4 实现槽函数 启动定时器 2 定时器类 项目完整的源代码 QT中使用定时器&#xff0c;有两种方式&#xff1a; 定时器类&#xff1a;QTimer定时器事件&#xff1a;QEvent::Timer&#xff0c;对应的子类是QTi…

SQL中常见的DDL操作及示例,数据库操作及表操作

目录 一、数据库操作 1、创建数据库 2、查看所有数据库 3、使用数据库 4、删除数据库 二、表操作&#xff1a; 1、创建表 2、查看表结构 3、修改表结构 3.1 添加列 3.2 修改列数据类型 3.3 修改列名 3.4 删除列 3.5 修改表名 3.6 删除表 注意&#xff1a; 在数…