2014-02-14 21 views
-3
List<Integer> roles = jdbcTemplate.queryForList("select role_id from user_roles where user_id = ?" , new Object[]{id}); 

    String roleIds= ""; 

    for (int i= 0; i < roles.size(); i++) 
    { 

      }   if (roles.get(i) != null) { 
      if(i!=0){ 
       roleIds += "," + m.get(i) ; 
      }else{ 
       roleIds += m.toString() ; 
      } 
     } 
    } 

    String queryString= "select u.id,u.user_id,count(distinct pf.id),IfNULL(upm.grievance_autoassign_enable,true) "+ 
      " from users u "+ 
      " inner join user_roles ur on ur.user_id=u.id " + 
      " left outer join user_preference_management upm on u.id = upm.id "+ 
      " inner join management_hierarchy mh on mh.child_id = u.id or mh.role_id =ur.role_id "+ 
      " left outer join (jbpm4_task jt "+ 
      " inner join process_flow pf on pf.pid = jt.execution_id_ and pf.grievance_mgmt_id is not null) on jt.assignee_ = u.user_id "+ 
      " where mh.parent_id = ? "+ (roleIds != null ? " or mh.role_id in (" + roleIds + ")" : "") + 
      " group by u.id,u.user_id order by count(pf.id) "; 

    return executeDBSummaryWithAutoAssign(queryString,new Object[] {id}); 
    } 

我的錯誤日誌:PreparedStatementCallback在SQL和Java

PreparedStatementCallback; 錯誤的SQL語法[select u.id,u.user_id,count(distinct pf.id),IfNULL(upm.grievance_autoassign_enable,true)from user u inner join user_roles ur on ur.user_id = u.id left left outer join user_preference_management upm on u.id = upm.id內部連接 mh.child_id = u.id或mh.role_id上​​的mh.child_id 012h= ur.role_id left外部連接(jbpm4_task jt內部連接process_flow pf on pf.pid = jt.execution_id_並且pf.grievance_mgmt_id不爲空) on jt.assignee_ = u.user_id其中mh.parent_id =? (角色ID = 2),{角色ID = 4},{角色ID = 1},{角色ID = 8},{角色ID = 38}, {角色ID = 22},{角色ID = 69}中的mh.role_id或mh.role_id。 ],[{role_id = 2},{role_id = 4},{role_id = 1}, {role_id = 8},{role_id = 38},{role_id = 22},{role_id = 69}],[{role_id = {2}, {role_id = 4},{role_id = 1},{role_id = 8},{role_id = 38},{role_id = 22}, {role_id = 69}],[{role_id = 2}, {role_id = 4},{role_id = 1},{role_id = 8}, {role_id = 38},{role_id = 22},{role_id = 69}],[{role_id = 2},{role_id = 4} , {role_id = 1},{role_id = 8},{role_id = 38},{role_id = 22}, {role_id = 69}],[{role_id = 2},{role_id = 4},{role_id = 1},{role_id = 8}, {role_id = 38},{role_id = 22},{role_id = 69}],[{role_id = 2},{role_id = 4}, {role_id = 1} role_id = 8},{role_id = 38},{role_id = 22},{role_id = 69 }]) group by u.id,u.user_id order by count(pf.id)]; 嵌套的異常是com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法中有一個 錯誤;檢查與您的 MySQL服務器版本對應的手冊,以找到在[{role_id = 2}, {role_id = 4},{role_id = 1},{role_id = 8},{role_id = 38} ,'{role_id = 22},'at line 1

+1

您可能需要提供一些更多的細節,但異常說你的SQL語法不正確。嘗試打印'queryString'並單獨運行。 – austin

+0

確保你的數組是你想要的。我有一種感覺,它不 – Alexander

+0

我認爲你有一個額外的'}',它會在if語句到達之前關閉'for'循環。 Miscopied的代碼也許?或者它實際上看起來像你的代碼? – jaredk

回答

1

在輸出地圖值列表的邏輯中存在一個錯誤。您輸出的是整個地圖,而不僅僅是您想要的一個值。

改變這一行:

roleIds += m.toString(); 

要:

roleIds += m.get(i); 
+1

'm'沒有在任何地方聲明。 –

+0

@DavidConrad基於它所做的調用和生成的輸出,它是一個必須在別處定義的Map。如果你閱讀了代碼,他在問題行附近正確使用它。 – Bohemian

+0

我同意它必須是一個地圖,但我不認爲他正確使用它。如果地圖確實包含「{role_id = 22}」之類的東西,他必須使用'm.get(「role_id」)'; 'm.get(i)'只是給'null'。 –