2014-02-15 29 views
0

我試圖打印一個列表(只有一個項目),但我的JPQL語句不能正常工作,因爲報價。我嘗試過所有可能的組合,但似乎沒有任何組合。如果有人有任何建議或不同的方法,我會很感激。 注意:在發佈這個消息之前,我在網站上發現了一個類似的問題,但答案不適用於我的案例。由於JPQL語句不適用於報價

String submittedName=request.getParameter("name"); 
user=entityManager.find(user.getClass(),submittedName); 
     Query myQuery=entityManager.createQuery 
       ("SELECT u.password FROM UserData u WHERE u.name=''"+submittedName+""); 
     List results=myQuery.getResultList(); 
     String convertedResults=results.get(0).toString(); 
     out.println(results); 
+0

你一定要明白,在實際的查詢,你正在做(至少在你發佈的代碼),無論'submitName'結束*外*引號,對吧? –

+0

忽略引號引起的問題。不要將從用戶接收的字符串連接到查詢中,就像您正在嘗試執行的操作一樣。這只是乞求你的數據庫被黑客入侵。有沒有聽說過鮑比桌子? http://stackoverflow.com/questions/332365/how-does-the-sql-injection-from-the-bobby-tables-xkcd-comic-work – Rob

+0

感謝您的幫助!這工作! – kellzer

回答

1

總結丹尼斯和Rob想說:

String submittedName=request.getParameter("name"); 
user=entityManager.find(user.getClass(),submittedName); 
Query myQuery=entityManager.createQuery("SELECT u.password FROM UserData u WHERE u.name=:name"); 
myQuery.setParameter("name", submittedName); 
List results=myQuery.getResultList(); 
String convertedResults=results.get(0).toString(); 
out.println(results);