0

使用 Groovy:不确定这是否是预期行为,但是当将 size() 应用于 GroovyRowresult 对象时,如果对象是通过调用 {Sql object}.rows( sql_select_text)。但是,如果 GroovyRowresult 对象是通过调用 {Sql object}.firstRow(sql_select_text) 创建的,它将返回返回记录中的字段数。问题似乎是对 {GroovyRowresult object}.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”运行它。

我把这个 issue 提交给 Groovy 大神审阅;我想我得看看他们怎么说。问题在这里找到。

4

1 回答 1

2

memCon.rows 返回一个List<GroovyRowResult>

memCon.firstRow 返回一个GroovyRowResult

所以第一次size调用获取列表的大小(行数)

第二次size调用获取GroovyRowResult(字段数)的大小

于 2013-01-10T15:32:02.687 回答