【问题标题】:Grails Count By does not return correct valueGrails Count By 不返回正确的值
【发布时间】:2014-12-25 13:07:48
【问题描述】:

我正在尝试使用 Grails Count By 返回数据库中的项目总数 我的查询是

def string  = "'%"+params.query+"%'"
def sqlquery ="SELECT COUNT(Status) FROM Document WHERE status= '"+params.Status+"' And doc_name LIKE "+string;
total = Document.executeQuery(sqlquery);

这应该返回我的总数,但它返回 0 而不是 724 我也尝试过类似

total = Document.countByStatusAndDocNameLike(params.docStatus,string);

但得到 0 而不是 724

这很奇怪,因为它返回正确的值

def sqlquery ="SELECT COUNT(Status) FROM Document WHERE doc_name LIKE "+string;
total = Document.executeQuery(sqlquery);

【问题讨论】:

  • params.Status 包含或可以包含什么?它可能会破坏您的 SQL(例如,如果它包含 ')。您需要转义传递给 SQL 查询的字符串或使用准备好的查询。
  • 它可以包含 New、Reviewed、In-progress 字符串
  • 您的数据库区分大小写还是不区分大小写?
  • def sqlquery ="SELECT COUNT(Status) FROM Document WHERE status = :stat AND doc_name LIKE "+string;总计 = Document.executeQuery(sqlquery,[stat:params.Status]);为我工作

标签: sql hibernate grails count hql


【解决方案1】:

所以,如果这两个:

def sqlquery ="SELECT COUNT(Status) FROM Document WHERE status= '"+params.Status+"' And doc_name LIKE "+string;
total = Document.executeQuery(sqlquery);

total = Document.countByStatusAndDocNameLike(params.docStatus,string);

返回相同的东西(他们应该),但是他们返回的计数是 0,然而这个:

def sqlquery ="SELECT COUNT(Status) FROM Document WHERE doc_name LIKE "+string;
total = Document.executeQuery(sqlquery);

返回您期望的所有文档,然后我必须建议您期望的文档没有 params.Status 中的状态。我建议打印出 params.Status 的值是什么,看看它是否匹配......完全......您期望返回的 724 文档中的值。请注意,最后一个查询中的 COUNT(Status) 不计算其中包含 params.Status 的那些(因为查询中没有提到 params.Status)...不妨说 COUNT(*)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2011-04-05
    相关资源
    最近更新 更多