Groovy Sql模块的基本使用示例教程

2019-10-03 16:13:47.0

Groovy的groovy-sql 模块是对 JDBC 的高度抽象,提供了对关系型数据库的支持。 groovy-sql 模块中最常用到的是 groovy.sql.Sql 类,这个类又把JDBC的对关系型数据库访问的抽象度提高了一级。

Groovy连接数据库

Sql. newInstance

Groovy连接数据库使用  newInstance  静态方法参数分别为:

参数示例(HSQLDB)urljdbc:hsqldb:mem:yourdb

usersa (or your username)

passwordyourPassword

driverorg.hsqldb.jdbcDriver

完整示例如下:

import groovy.sql.Sql

def url = 'jdbc:hsqldb:mem:yourDB'

def user = 'sa'

def password = ''

def driver = 'org.hsqldb.jdbcDriver'

def sql = Sql.newInstance(url, user, password, driver)

// use 'sql' instance ...

sql.close()

以下以mysql为例,使用如下:

url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=UTF-8&useUnicode=true"

sql = Sql.newInstance(url, "root", "root", "com.mysql.cj.jdbc.Driver")

List testList = sql.rows("select * from test")

for (GroovyRowResult row : testList) {

println row

println row.get("id")

println row.get("name")

println row.get("remark")

}

println testList

sql.close()

Sql.withInstance

Sql.withInstance 可以自动关闭sql实例,不需要手动调用 sql.close() 方法。使用如下:

Sql.withInstance(url, user, password, driver) { sql ->

// use 'sql' instance ...

}

new Sql(dataSource)

对于一个已有的数据源datasource,创建sql实例连接可使用 new Sql(dataSource), 如下代码:

import groovy.sql.Sql

import org.hsqldb.jdbc.JDBCDataSource

def dataSource = new JDBCDataSource(database: 'jdbc:hsqldb:mem:yourDB', user: 'sa', password: '')

def sql = new Sql(dataSource)

// use then close 'sql' instance ...

此外,还可以使用数据库连接池以及@Grab实例化Sql,连接数据库,详情可以参考文档。

Groovy执行SQL语句

可以使用sql实例的  execute()  方法执行任意的SQL语句。

创建数据表示例:

// ... create 'sql' instance

sql.execute '''

CREATE TABLE Author (

id INTEGER GENERATED BY DEFAULT AS IDENTITY,

firstname VARCHAR(64),

lastname VARCHAR(64)

);

'''

// close 'sql' instance ...

添加数据行 insert

添加数据可以使用execute方法,如下:

sql.execute "INSERT INTO Author (firstname, lastname) VALUES ('Dierk', 'Koenig')"

也可以使用 executeInsert 方法。

sql.executeInsert 执行sql语句

List> keysList =

sql.executeInsert("INSERT INTO Author (firstname, lastname) VALUES ('Dierk', 'Koenig')")

执行的sql语句可以是批量插入语句,所以sql.executeInsert方法的返回值是多次insert之后自动生成的列的list。一般自动生成的是主键等。

sql.executeInsert 执行预编译sql语句

def insertSql = 'INSERT INTO Author (firstname, lastname) VALUES (?,?)'

def params = ['Jon', 'Skeet']

def keys = sql.executeInsert(insertSql, params)

def insertSql1 = 'INSERT INTO Author (firstname, lastname) VALUES (:firstname,:firstname)'

def paramMap = ['firstname':'Jon', 'lastname':'Skeet']

def keys1 = sql.executeInsert(paramMap, insertSql1)

sql.executeInsert 使用GString参数

def first = 'Guillaume'

def last = 'Laforge'

def myKeyNames = ['ID']

def myKeys = sql.executeInsert("""

INSERT INTO Author (firstname, lastname)

VALUES (${first}, ${last})

""", myKeyNames)

sql.executeInsert 的返回值

此外,以上三个 executeInsert 方法都可以传入最后一个参数 List keyColumnNames, 这个参数就是需要返回的 column 的列名的list。

返回值就是多次insert之后自动生成的这些列的list。

更新数据行 executeUpdate

sql.execute "UPDATE Author SET firstname='Erik' where lastname='Thorvaldsson'"

def updateSql = "UPDATE Author SET lastname='Pragt' where lastname='Thorvaldsson'"

def updateCount = sql.executeUpdate(updateSql)

assert updateCount == 1

删除数据行 execute

boolean r = sql.execute("DELETE FROM Author WHERE lastname = 'Skeet'")

Groovy Sql数据查询

Groovy Sql的数据查询可以使用 query, eachRow, firstRow 和 rows方法,如下:

query 查询数据

def expected = ['Dierk Koenig', 'Jon Skeet', 'Guillaume Laforge']

def rowNum = 0

sql.query('SELECT firstname, lastname FROM Author') { resultSet ->

while (resultSet.next()) {

def first = resultSet.getString(1)

def last = resultSet.getString('lastname')

assert expected[rowNum++] == "$first $last"

}

}

eachRow数据查询

rowNum = 0

sql.eachRow('SELECT firstname, lastname FROM Author') { row ->

def first = row[0]

def last = row.lastname

assert expected[rowNum++] == "$first $last"

}

firstRow数据查询

def first = sql.firstRow('SELECT lastname, firstname FROM Author')

assert first.values().sort().join(',') == 'Dierk,Koenig'

rows数据查询

List authors = sql.rows('SELECT firstname, lastname FROM Author')

assert authors.size() == 3

assert authors.collect { "$it.FIRSTNAME ${it[-1]}" } == expected

sql函数查询

assert sql.firstRow('SELECT COUNT(*) AS num FROM Author').num == 3

其他 groovy-sql 高级内容请参考:

http://jvm123/2019/10/groovy-sql-advance.html

2019-10-03 16:13:47.0

更多推荐

groovy mysql_Groovy Sql模块的基本使用示例教程