JAVA编程下JDBC操作数据绑定的另类方法 数据库绑定简单可靠方法。

今天写JDF框架代码,写到了bean的SQL加工以及变量绑定。就写了个方法,希望大家喜欢。用过的就过来打酱油,没用过的,就过来俯卧撑一把吧。

 

我们写JAVA代码,在操作数据库用JDBC的方法的时候,会用到SQL的绑定变量。

我们大家一般的做法是用"?" ,然后按"?"的排序给予赋值,但是如果是复杂的SQL,或者说一个好好的SQL,需要在中间加一个条件,那么对应的后面的付值变量都要改动了。例如。

 

SELECT NAME,ID,? FROM USER WHERE CODE=?

PreparedStatement.setString(1, "AGE");

PreparedStatement.setString(2, "ADMIN");

 

这里我们绑定了两个变量,一个是动态读取列,一个是条件,如果现在我们由于业务需要,需要再多读一列。

 

 那下面的SQL是这样,那么这里给CODE绑定的变量赋值的索引就要改变了。

 

SELECT NAME,ID,?,? FROM USER WHERE CODE=?

 

PreparedStatement.setString(1, "AGE");

PreparedStatement.setString(3, "ADMIN");

PreparedStatement.setString(2, "FLAG");

 

这里我们可以发现,需要把CODE的赋值的索引给改掉,如果是复杂的SQL,那改动更多,那怎么办呢?

 

下面我们用这种类型的绑定来做,也就是换个思路,把绑定的变量用name给替换下,通过程序自动排序。 

 

SELECT NAME,ID,?,? FROM USER WHERE CODE=?

 

替换为

 

SELECT NAME,ID,:CLUM1,:CLUM2 FROM USER WHERE CODE=:CODE

 

我们在赋值的时候,做个MAP

 

HashMap map = new HashMap();

map.put("CODE",new Long(2));

map.put("CLUM1","AGE");

map.put("CLUM2","STATE");

 

 

然后写个绑定变量的方法,这里的顺序问题就无所谓了,代码如下:

 

 

 

 

这里唯一的小要求就是SQL的绑定变量 :xx 后面要留个空格,便于正则表达式寻找。这里希望谁能给我个好的正则表达式,这样就可以不用这个了。

 

上面的程序,我们运行,输出结构如下:

 

ConnectionId=100000
ConnectionId=100000 Preparing Statement: INSERT INTO PERSON(PERSON_ID,AGE,FIRSTNAME,LASTNAME,STATE) VALUES(?  ,?  ,?,?,?)
邦定变量的值:PERSON_ID=2
邦定变量的值:AGE=22
邦定变量的值:FIRSTNAME=张三
邦定变量的值:FIRSTNAME=张三
邦定变量的值:STATE=1
PreparedStatementId=100001 Executing Statement: INSERT INTO PERSON(PERSON_ID,AGE,FIRSTNAME,LASTNAME,STATE) VALUES(?  ,?  ,?,?,?)
PreparedStatementId=100001 Parameters: [2, 22, 张三, 张三, 1]
PreparedStatementId=100001 Types: [java.lang.Long, java.lang.Long, java.lang.String, java.lang.String, java.lang.Long]

大家看看,是不是很简单呢?而且不用为那个索引头疼了。

 

原创文章,请尊重版权噢:

http://http://blog.csdn.net/keyboardsun

作者KEYBOARDSUN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值