Java 處理 sql in 多條件搜索時 單引號雙引號問題

當多條件搜索時:用in 怎麼轉換

比如 當傳過來的參數是一個字符串 :str="a,b,c";

用sql ............ in(str)/in("a,b,c")顯然是不對的 我們最終需要的是 in('a','b','c');

這就需要將str:"a,b,c"轉成'a','b','c'

 

	@Override
	public List<Object> selectJobByToAndT1OfChooseMach(String t0, String t1, String str) throws Exception {
		String sql="";
		StringBuilder sb = new StringBuilder();
        if(str!=""){
        	String as[]=str.split(",");
    		for (int i = 0; i < as.length; i++) {
     		sb.append("'"+as[i]+"'");//拼接單引號,到數據庫後臺用in查詢.
     		if(i!=as.length-1){//前面的元素後面全拼上",",最後一個元素後不拼
     		sb.append(",");
     		}
    	   }
		sql="select jobCode,machCode,mouldCode,jobManager,jobAvailability,quality,jobPerformance,startTime,endTime,jobStatus,goodUnits,scheduledProducedUnits from DBJobProduceStatus where  (machCode in("+str+") and jobStatus='false' and startTime<='"+t1+"' and  now() >='"+t0+"') or (machCode in("+str+") and jobStatus='true' and startTime<'"+t1+"' and endTime>'"+t0+"')";
		sql=sql.replace(str, sb);
		}else{
			sql="select jobCode,machCode,mouldCode,jobManager,jobAvailability,quality,jobPerformance,startTime,endTime,jobStatus,goodUnits,scheduledProducedUnits from DBJobProduceStatus where  (machCode in('') and jobStatus='false' and startTime<='"+t1+"' and  now() >='"+t0+"') or (machCode in('') and jobStatus='true' and startTime<'"+t1+"' and endTime>'"+t0+"')";
		} 
  		  
 		Session session = hibernateTemplate.getSessionFactory().getCurrentSession();
  		List<Object> resultList=session.createSQLQuery(sql).list();
		return resultList;
	}

注:傳過來的str是一個字符串:例如:str="a,b,c";

最終效果是:'a','b','c'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章