我在作网站的时候有一个须要在不一样的插入时间改变查询的逻辑结构,这个时候用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添加时的顺序很关键 } }