Groovy的SQL模块提供了对JDBC的抽象,让我们使用JDBC更简单,相关类在groovy.sql
包下。本文参考自Working with a relational database,一些代码引用了官方文档,需要了解详细信息请参见原文。
连接数据库
和原文一样,为了简单这里使用嵌入式数据库HSQLDB,连接时在内存中创建一个数据库。数据库驱动可以使用Maven或Gradle导入,也可以使用Groovy自带的Grape依赖管理器。不过在Intellij IDEA上,下面的代码有时候无法编译,说是找不到数据库驱动。这时候可以使用Gradle等工具管理依赖。
Groovy SQL的所有操作都在Sql类中,我们调用Sql的newInstance方法,传递URL、用户名、密码等参数即可连接到数据库。这种方式需要自己手动调用close方法关闭数据库。如果希望Groovy自动关闭连接,可以使用withInstance方法,所有操作都在该方法的参数闭包中完成,之后会自动关闭连接。
@GrabResolver(name = 'aliyun', root = 'http://maven.aliyun.com/nexus/content/groups/public/')
@GrabConfig(systemClassLoader = true)
@Grab(group = 'org.hsqldb', module = 'hsqldb', version = '2.3.4')
class SqlDatabase {
static void main(String[] args) {
def sql = setUpDatabase()
}
static Sql setUpDatabase() {
def url = 'jdbc:hsqldb:mem:test'
def user = 'sa'
def password = ''
def driver = 'org.hsqldb.jdbcDriver'
def sql = Sql.newInstance(url, user, password, driver)
return sql
}
如果使用数据源创建连接。可以直接将数据源传递给Sql的构造方法,即可由数据源创建连接。
def dataSource = new JDBCDataSource(
database: 'jdbc:hsqldb:mem:yourDB', user: 'sa', password: '')
def sql = new Sql(dataSource)
创建数据表
我们可以使用Sql的execute方法执行SQL语句。这里创建了一个数据表。另外还有executeInsert和executeUpdate方法用于执行插入和更新操作。由于Groovy支持多行字符串,所以我们不用像Java那么费劲。
static void setUpTables(Sql sql) {
println('准备表')
sql.execute('''
CREATE TABLE author (
id INTEGER GENERATED BY DEFAULT AS IDENTITY,
firstname VARCHAR(64),
lastname VARCHAR(64)
);
''')
println('准备表完成')
}
增删查改
插入数据
插入数据可以使用execute或executeInsert方法。它们的主要区别是executeInsert方法会返回一个列表,包含了插入数据对应的所有主键。这两个方法都支持?
占位符和