2014-10-29 37 views
0

我想通过数据库使用Grails算经 查询,我要返回的总项数的正确值是Grails的计数通过不返回

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

这是无线ERD因为这个所以返回正确的值

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

'params.Status'包含或可以包含什么?它可能会破坏你的SQL(例如,如果它包含''')。您需要转义传递给SQL查询的字符串或使用Prepared Queries。 – Felk 2014-10-29 17:39:08

+0

它可以包含新的,已审核的,正在进行的字符串 – krs8785 2014-10-29 17:40:16

+0

您的数据库区分大小写或不区分大小写? – 2014-10-30 09:58:32

回答

0

,如果这两个:他们返回

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(状态)不包括那些具有params.Status的状态(因为params.Status在查询中没有提到)......也就是说COUNT(*)。