groovy sql eachRow和rows方法

She*_*nny 10 sql groovy

我是grails和groovy的新手.任何人都可以向我解释这两个groovy sql方法之间的区别

sql.eachRow
sql.rows
Run Code Online (Sandbox Code Playgroud)

还有哪个更高效?

我正在开发一个从数据库中检索数据的应用程序(结果集非常庞大)并将其写入CSV文件或返回JSON格式.

我想知道上面提到的两种方法中的哪一种可以更快更有效地完成这个过程.

Dón*_*nal 23

任何人都可以向我解释这两个groovy sql方法sql.eachRow sql.rows之间的区别

由于每种方法都有大量的重载版本,因此很难确切地确定您所引用的2种方法.但是,在所有情况下,eachRow什么都不返回

void eachRow(String sql, Closure closure)
Run Code Online (Sandbox Code Playgroud)

rows返回行列表

List rows(String sql) 
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用eachRow,则传入的闭包作为第二个参数应该处理每一行,例如

sql.eachRow("select * from PERSON where lastname = 'murphy'") { row ->
    println "$row.firstname"
}
Run Code Online (Sandbox Code Playgroud)

而如果你使用rows行返回,因此应该由调用者处理,例如

rows("select * from PERSON where lastname = 'murphy'").each {row ->
    println "$row.firstname"        
}
Run Code Online (Sandbox Code Playgroud)

还有哪个更高效?

这个问题几乎无法回答.即使我自己实施了这些方法,也无法知道哪一个会对有好处,因为我不知道

  • 你正在使用什么硬件
  • 您要定位的JVM
  • 你正在使用什么版本的Groovy
  • 你要传递什么参数
  • 此方法是否是应用程序性能的瓶颈

或影响方法性能的任何其他因素,这些因素无法仅从源代码中确定.你可以得到一个有用的答案的问题,其方法是更有效的唯一方式对你是通过测量每个的性能.

尽管我上面已经说过了所有内容,但如果这两者之间的性能差异在任何方面都很重要,我会感到惊讶,所以如果我是你,我会选择你觉得比较方便的那个.如果你后来发现这个方法是一个性能瓶颈,请尝试使用另一个(但我会打赌你一美元到一角钱没有区别).