0

Groovy の使用: これが意図した動作かどうかはわかりませんが、GroovyRowresult オブジェクトに適用された size() を使用すると、オブジェクトが {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」で実行します。

Groovy の神々によるレビューのためにこの号を提出しました。私は彼らが何を言うかを見る必要があると思います。問題はここにあります

4

1 に答える 1

2

memCon.rows を返しますList<GroovyRowResult>

memCon.firstRow を返しますGroovyRowResult

したがって、最初のsize呼び出しでリストのサイズ (行数) を取得します。

2 番目のsize呼び出しは、GroovyRowResult(フィールドの数)のサイズを取得します。

于 2013-01-10T15:32:02.687 に答える