2012-08-31 187 views
2

返回特殊字符,我做了這樣的查詢:的Java - 休眠不是選擇查詢

Query query = PlatoonApp.getEntityManager().createQuery(
       "SELECT c FROM Client c WHERE c.type1 LIKE ? or c.type2 LIKE ? or c.type3 LIKE ?" + 
       " or c.type4 LIKE ? ORDER BY c.type", Client.class); 

     query.setParameter(1, legalStrQuery + "%"); 
     query.setParameter(2, legalStrQuery + "%"); 
     query.setParameter(3, individualStrQuery + "%"); 
     query.setParameter(4, individualStrQuery + "%"); 

     query.setFirstResult(startPosition); 

     if (maxResults != 0) 
      query.setMaxResults(maxResults); 

     return (List<Client>) query.getResultList(); 

這是查詢。我有一些信息使用「'」,「〜」,這些字符正在被替換。爲什麼會發生?

+0

什麼取代? – kosa

+0

@Nambari與另一個字符。當我在mysql命令行中執行SELECT時,這些字符就像他們應該出來的那樣。 –

+0

什麼是在hibernate-cfg.xml中定義的字符編碼? – kosa

回答

0

通過在其之前添加另一個單引號來逃避單引號。 '將變成''

我不認爲~是非法字符,它只是單引號掛起你。

注:我想你可以用下面的正則表達式替換所有單引號,(?!<')['](?!')所以你可以做這樣的事情..

stringInstance.replaceAll("(?!<')['](?!')", "''");