GroovyRowresult对象在调用size()时返回不同类型的值,具体取决于对象的实例化方式

时间:2013-01-10 15:13:39

标签: groovy

使用Groovy:不确定这是否是预期的行为,但是当使用应用于GroovyRowresult对象的size()时,如果通过调用{Sql object}创建对象,它将返回对象中的行数.rows(sql_select_text)。但是,如果GroovyRowresult对象是通过调用{Sql object} .firstRow(sql_select_text)创建的,则它将返回返回记录中 fields 的数量。问题似乎是对{GroovyRowresult对象} .size()的调用的返回值取决于GroovyRowresult对象是如何形成的,而不是其他任何明显或明显区别的东西。这是否是预期的行为?即使对于最新的版本,我也无法在Groovy文档中找到它。 Groovy。代码示例:

/*
 Using HyperSQL for database implementation for test, so you need the
 HSQLDB package from http://hsqldb.org/ to run this test in the Groovy
 runtime classpath or explode the hsqldb.jar file into the same directory as this
 .groovy script.
*/

import groovy.sql.Sql

memCon = Sql.newInstance("jdbc:hsqldb:mem", "SA", "","org.hsqldb.jdbcDriver")

memCon.execute("DROP TABLE IF EXISTS TBL")
memCon.execute("""create table TBL ( 
 AAA    VARCHAR(50),
 BBB    VARCHAR(50)
)""")

sql = "INSERT INTO TBL VALUES ('123', 'ABC')"
memCon.execute(sql)
sql = "INSERT INTO TBL VALUES ('456', 'ABC')"
memCon.execute(sql)
sql = "INSERT INTO TBL VALUES ('789', 'ABC')"
memCon.execute(sql)

sql = "select * from TBL"

rows = memCon.rows(sql)
println '(.rows) rows.size() = ' + rows.size()  // returns 3

rows = memCon.firstRow(sql)
println '(.firstRow) rows.size() = ' + rows.size() // returns 2

测试:将上面的代码列表保存到名为“test.groovy”的文件中。将它放在与hsqldb.jar文件相同的目录中(如果您更改了Groovy运行时类路径以包含对它的引用)或其展开的文件结构,并使用“groovy test.groovy”运行它。

我提交了这个问题供Groovy众神审查;我想我必须看看他们说什么。找到问题here

1 个答案:

答案 0 :(得分:2)

memCon.rows returns一个List<GroovyRowResult>

memCon.firstRow returns一个GroovyRowResult

因此第一个size调用获取List的大小(行数)

第二次size调用获得GroovyRowResult(字段数)

的大小