使用Groovy SQL进行行的分页,排序和搜索/过滤

时间:2012-03-30 20:18:27

标签: sql groovy dataset flexigrid

我使用Groovy SQL进行数据库访问。很好,但我有一个需要,我找不到解决方案。

我在Sql类中看到分页支持非常好,例如:

sql.eachRow('select * from VENDOR', ((pageNumber-1)*pageSize)+1, pageSize) { row -> 
...
}

我也看到像这样的搜索/过滤:

def rows = sql.rows("select * from PROJECT where name like 'Gra%'")

最后像这样排序(和过滤?)(使用DataSet类):

def vemdpr = new DataSet(sql, 'VENDOR') 
def sortedVendorsOfInterest = vendor.
    findAll{ it.vendorName like '%Alpha%' }.
    sort{ it.vendorName }.reverse() //for desc order, leave off "reverse" for asc

有谁能告诉我如何将它们组合在一起工作?我有一个flexigrid,我正在显示表行,它允许所有这些功能的组合。

谢谢!标记

P.S。除非知道如何利用Groovy执行此操作(我的偏好),如果有人可以告诉我如何将所有这些结合到SQL查询中,我总是可以执行查询。

1 个答案:

答案 0 :(得分:0)

一个解决方案是将其作为带参数的SQL查询:

sql.eachRow('select * from VENDOR where vendorName like ? order by vendorName asc', ['%Alpha%'] ((pageNumber-1)*pageSize)+1, pageSize) { row -> 
...
}

查看DataSet源代码显示它不提供分页。它可以通过使用适当的参数offset和maxRows扩展DataSet.rows()并修改对super.rows的底层调用(getSql(),getParameters(),offset,maxRows)来轻松添加。

- 更新 -

我在Groovy JIRA上提出了一个问题,并在Groovy项目上创建了一个pull请求来解决它,这使得它成为Groovy 2.0和Groovy 1.8.7(尚未发布)。所以现在DataSet也支持分页!

参见groovy 2.0.0 API: