Java中使用PrepateStatement並且like模糊查詢

在使用PreparedStatement進行模糊查詢的時候廢了一番周折,以前一直都沒有注意這個問題。一般情況下我們進行精確查詢,sql語句類似:select * from table where name =?,然後調用PreparedStatement的setString等方法給?指定值。那麼模糊查詢的時候應該怎麼寫呢?我首先嚐試了:select *from customer where name like ‘%?%’。
此時程序報錯,因爲?被包含在了單引號中,PreparedStatement並不視它爲一個參數。後來上網查了相關的一些資料,發現可以這樣寫select * from table where name like?;但是在指定參數的時候把?指定爲”%”+name+”%”,name是指定的查詢條件。這樣就OK了。
一般情況下,我總是潛意識的認定了?就是取代所指定的參數,但是實際上我們可以對指定的參數進行了一定的包裝之後再傳給?,比如這裏我們在參數的前後都加了一個%,然後再傳給? 
 
   String expr = "select * from  table where url like?";
   pstmt =con.prepareStatement(expr);
   String a="a";
   pstmt.setString(1,"%"+a+"%");//自動添加單引號 (包裝後的參數)
  pstmt.execute();
  System.out.println(pstmt.toString());//打印sql
   //會默認生成sql: select *from  table where url like '%http%'



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