指南 6 - Groovy SQL

Groovy SQL

这节的部分内容来自Andrew Glover的这篇GroovySQL的文章。如果一些JDBC的参考文章很难懂,不用担心。下面的章节都用了一种新的语言特征,也就是在字符串定义中包含变量。例如:

piEstimate = 3;
println("Pi is about ${piEstimate}");
println("Pi is closer to ${22/7}");

正如你所见,在一个字符串字面值中,Groovy把所有在${}中的内容解析为一个groovy表达式。

下面的章节广泛的使用了这个特征。

执行一个简单的查询

你的第一个Groovy SQL代码有3行。

import groovy.sql.Sql
sql = Sql.newInstance("jdbc:jtds:sqlserver://serverName/dbName-CLASS;domain=domainName", "username",
                     "password", "net.sourceforge.jtds.jdbc.Driver")
sql.eachRow("select * from tableName", { println it.id + " -- ${it.firstName} --"} );

第一行是一个Java导入。它只是告诉Groovy Sql对象的全名。第二行创建了一个新的SQL数据库连接,并把连接保存在变量sql中。

这段代码是针对MS SQL Server数据库的jTDS连接。你需要修改newInstance的所有参数来连接你的数据库,尤其是usernamepassword

最后,第三行调用sql的eachRow方法,并传入两个参数,第一个是查询字符串,第二个是一个显示一些值的闭包。

注意,在闭包中通过两种不同的方式来访问“it”的字段。第一种是把it的id字段当作简单的字段引用来访问。第二种是上面提到的内嵌Groovy表达式。

所以一行的输出可能是:

001 -- Lane --

从数据库中获取单一值

如果你只需要数据库中的一行的一列或多列的值,你可以这样做

row = sql.firstRow("select columnA, columnB from tableName")
println "Row: columnA = ${row.columnA} and columnB = ${row.columnB}"

更复杂的查询

之前的例子是相当简单的,而当涉及更复杂的数据操作查询(如插入、更新和删除查询)时,GroovySql也同样稳定。要进行这些操作,你不会想使用闭包,所以Groovy的Sql对象提供了execute和executeUpdate方法作为替代。这些方法让人想起了普通的JDBC statement类,它也有一个execute和一个executeUpdate方法。

这里是一个简单的插入,它再次使用了${}的变量替代语法。这段代码只是把一个新的行插入到people表中。

firstName = "yue"
lastName = "wu"
sql.execute("insert into people (firstName, lastName) "+
  " values ('${firstName}', '${lastName}')")

注意,在这个例子中,你必须在插入语句的任何字符串数据的周围加上引号。一般来说,这不是一个好的办法(考虑如果你的数据包含了一个引号会发生什么事情)。一个更好的方式来做这件事情是像下面这样子使用预编译语句(prepared statement):

firstName = "yue"
lastName = "wu"
sql.execute("insert into people (firstName, lastName) "+
  " values (?,?)", [firstName, lastName])

你想插入的数据被插入语句中的“?”代替,然后值以一个数据的数组的形式传入。更新几乎是一模一样的,只是它使用了executeUpdate方法。注意,executeUpdate方法也是接受一个值的列表,而这些值将匹配查询中对应的?元素。

comment = "Lazy bum"
sql.executeUpdate("update people set comment = ? where id=002", [comment])

删除基本上跟插入相同,当然,除了查询的语法不同。

sql.execute("delete from word where word_id = ?" , [5])
 
wiki/getting_started_guide/tutorial_6.txt · 最后更改: 2008-09-09 16:40 由 johnny
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki