Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql grails-打印每行';GroovyRowResult中具有列名的s值_Sql_Grails_Groovy_Each - Fatal编程技术网

Sql grails-打印每行';GroovyRowResult中具有列名的s值

Sql grails-打印每行';GroovyRowResult中具有列名的s值,sql,grails,groovy,each,Sql,Grails,Groovy,Each,我想让用户触发sql查询,然后在grails视图页面中查看结果 我的QueryController.groovy是 def query(){ def headers = null; //["id","name"] Sql sql = new Sql(dataSource) def rowResults = sql.rows(params.query) //GroovyRowResult rowResults.eachWithIndex { row, index-&

我想让用户触发sql查询,然后在grails视图页面中查看结果

我的
QueryController.groovy

def query(){
    def headers = null; //["id","name"]
    Sql sql = new Sql(dataSource)
    def rowResults = sql.rows(params.query) //GroovyRowResult
    rowResults.eachWithIndex { row, index->
           if (headers == null) {
                   headers = row.keySet()
           }
    }
    [headers : headers, resultList: rowResults, total : rowResults.size() ]

}
在grails视图页面(
query.gsp
)中


${val}
视图中的
${val}
部分未按预期工作,因为它给出的结果是
id=1
,而不是
1
。我只想在那里显示值

可能是一个较小的问题,但需要解决它


谢谢。

通过访问每个地图上的值来尝试访问值:

<table class="table table-striped" border="1">
    <thead>
    <tr>
        <g:each in="${headers}" var="header">
            <g:sortableColumn property="header" title="${header}" />
        </g:each>
    </tr>

    </thead>
    <tbody>
    <g:each in="${resultList}" var="row">
        <tr>
            <g:each status="counter" in="${row}" var="val">
                <td>${val.value}</td>
            </g:each>
        </tr>
    </g:each>

    </tbody>
</table>
仅供参考,您为用户提供的功能非常强大,他们可以对您的数据库运行任何类型的查询,甚至删除您的表


我得到了以下代码,因为val是KVP

<tr>
                      <g:each status="counter" in="${row}" var="val">
                           <td>${val.value}</td>
                      </g:each>
</tr>

${val.value}

感谢您提出的从
GroovyRowResult
获取列名的经济高效的建议。实际上,我正在尝试开发一个报告模块,用户可以自己查询数据库。当然,drop命令将被阻止。或者,我可以构建自己的特定于应用程序的查询语言。进一步的建议将不胜感激。我不会允许用户直接对数据库编写查询。我会找到他们经常使用的用例,并可能创建灵活的预定义查询,以便他们可以执行。
 def query(){
        def headers = null; //["id","name"]
        Sql sql = new Sql(dataSource)
        def rowResults = sql.rows("select * from Message;") //GroovyRowResult

       // rowResults is a list, you can access it by its index
        headers = rowResults[0].keySet()  
<tr>
                      <g:each status="counter" in="${row}" var="val">
                           <td>${val.value}</td>
                      </g:each>
</tr>