从Grails MVC应用程序查询Postgres

时间:2015-12-10 08:15:31

标签: postgresql grails gorm

  • 已配置Datasource.groovy和BuildConfig.groovy
  • 需要帮助在groovy服务中查询Postgres数据库。

在postgres中有一个下表: table structure

需要在grails应用程序中编写以下SQL查询:

SELECT json_agg(r)
FROM(
SELECT data#>'{"name"}' as program,data#>'{"country"}' as agency,sum(cast(cast(data#>'{"amount"}' as text)as Integer)) as total_amount 
 FROM salary 
 group by data#>'{"name"}',data#>'{"country"}'
 order by program, agency
)r  

2 个答案:

答案 0 :(得分:0)

对不起,我还不能发表评论,因为我没有50个声誉,所以我在这里发表评论。 您是否尝试使用postgres中的CREATE VIEW创建视图并使用服务中的简单查询?这就是我对我的所作所为。从grails查询这种方式要容易得多。

编辑 - 我的SQL服务示例

package com.myApp

import groovy.sql.Sql  //Need to import this 

class SomeService {

    def dataSource //Need it to connect to your database

    def result() {

        def sql = new Sql(dataSource)

        def resultRows = sql.rows('...your SQL statement...')
    }
}


package com.myApp

class SomeController {

    def someService  //Inject your serivce here

    def resultRows = someService.result()  //Call service method here
    [resultRows:resultRows]  //Put the result into a map

}

您可以从视图中调用结果地图。

现在,如果您不想在服务中使用长SQL语句,则可以在postgres中使用CREATE VIEW sql语句。

CREATE or REPLACE VIEW result_table as
        (... your SQL statement...);

我希望它有所帮助。

答案 1 :(得分:0)

使用以下代码,它可以工作......

DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/TestDb");
dataSource.setUsername("postgres");
dataSource.setPassword("password");
def sql = new Sql(dataSource)
def resultRows = sql.rows(---SQL Query here---)
return resultRows

需要帮助用Hibernate替换上面的JDBC方法。