2014-10-29 176 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(*)。