如果学习过Java语言的JDBC开发数据库应用,就会知道开发一个简单的查询通常需要经过以下几个步骤:
1、用Class.forName加载JDBC驱动
2、DriverManager.getConnection得到一个数据库连接
3、创建Statement结构
4、执行查询语句
5、关闭查询结果、Statement结构及数据库连接
这些核心代码外,还需要捕捉ClassNotFound异常、SQL异常,关闭资源还需要在 finally 块中执行以确保资源一定会被关闭。
这些代码编写下来, 少说要二三十行了。
Groovy提供了对数据库的支持(groovy.sql包),通过一个查询所需要的代码和繁琐的Java中的操作比较一下:
通过代码比较,能看出来Groovy语言的目的就是让开发者专心进行功能的编写,无需为繁琐重复的底层劳神。
当然,上面这个示例想要运行起来,首先得有个数据库,示例中使用的是MariaDB(MySql的分支版本),其次,得有对应的JDBC驱动,并且对应的JDBC驱动的jar包要在类路径下以便创建连接的时候能够被加载。
在此顺便安利一下Docker,对于日常开发的支撑环境非常方便,现在Docker引擎也支持在Windows环境下安装了,具体可以从 https://store.docker.com/search?type=edition&offering=community 下载安装,引擎安装好以后,就会发现打开了一个新世界,各种支撑环境再不用繁琐的安装步骤了。
Docker这里不展开讲了,还是回来看数据库操作:
newInstance与withInstance
上述代码已经极大简化了数据库连接、释放的工作,但使用 newInstance 创建的方式,仍然需要使用显式语句进行关闭。如果想让Groovy自动关闭,可以使用 withInstance + 闭包的形式来使用:
一个方法加闭包完成操作,丝毫看不到打开资源、释放资源的痕迹:)
来看下Sql类中一些常用的方法:
query
query方法使用java.sql.ResultSet接口来操作数据,使用方法和Java中没有区别:
eachRow
本节第一个例子就使用来eachRow方法来进行查询,查询结果会被包装成 groovy.sql.GroovyResultSet 对象来使用。
firstRow
firstRow只返回数据集的一行数据(GroovyResultSet对象):
rows
rows方法返回一个GroovyRowResult的列表:
execute
execute几乎是一个通用的方法,insert、update、delete操作均可使用:
executeInsert
executeInsert 从语义上强调是Insert操作,并且与execute不同的是, executeInsert会返回一个列表, 包含插入数据对应的所有主键(仅限于数据库自动生成的主键,例如自增长主键)
executeUpdate
executeUpdate方法和executeInsert方法相同的用法,返回值是受影响的行数:
未完待续...
领取专属 10元无门槛券
私享最新 技术干货