我在作網站的時候有一個須要在不一樣的插入時間改變查詢的邏輯結構,這個時候用PreparedStatement就不太適合了靈活性太差。因此我就寫了一個sql拼接工具。它的原理是將sql語句段與值綁定在一塊兒,而後在最後拼接的時候把值按順序傳人給PreparedStatement。這樣咱們任意拼接咱們的sql語句還能夠防止sql注入的困擾。 java
平時我都是用Hibernate進行操做,但有時我多表查詢是Hibernate的靈活性就也受到了限制,因此sqlHandle仍是適用很多狀況的。 git
我已經將代碼上傳到osc代碼託管服務了http://git.oschina.net/plug/sqlHandle 歡迎有興趣的同窗能夠加入進來來優化一下。 sql
package com.sql.db; /** * sql拼接測試代碼 * @author 梁前武 * www.apkplug.com */ public class test { /** * @param args */ public static void main(String[] args) { //1 sqlHandle sql1=new sqlHandle(); sql1.Add("select * from user where " ,"",null). Add("name=?","", "liling"). Add("age=?","and", 10); System.out.println(sql1); //select * from user where name=? and age=? sql1.AddMore("LIMIT ?,?", "", new Object[]{1,2}); System.out.println(sql1); //select * from user where name=? and age=? LIMIT ?,? //2 sqlHandle sql2=new sqlHandle(); sql2.Add("select * from friend where " ,"",null). Add("myfriend=?","", "liling"); System.out.println(sql2); // select * from friend where myfriend=? sql1.AddMoreAndRep(" in(%s) ",sql2, "and", null); System.out.println(sql1); //select * from user where name=? and age=? LIMIT ?,? and //in( select * from friend where myfriend=? ) //很明顯sqlHandle添加時的順序很關鍵 } }