让JAVA的JDBC支持命名参数的SQL语句

上传人:m**** 文档编号:59794897 上传时间:2018-11-11 格式:DOCX 页数:5 大小:26.23KB
返回 下载 相关 举报
让JAVA的JDBC支持命名参数的SQL语句_第1页
第1页 / 共5页
让JAVA的JDBC支持命名参数的SQL语句_第2页
第2页 / 共5页
让JAVA的JDBC支持命名参数的SQL语句_第3页
第3页 / 共5页
让JAVA的JDBC支持命名参数的SQL语句_第4页
第4页 / 共5页
让JAVA的JDBC支持命名参数的SQL语句_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《让JAVA的JDBC支持命名参数的SQL语句》由会员分享,可在线阅读,更多相关《让JAVA的JDBC支持命名参数的SQL语句(5页珍藏版)》请在金锄头文库上搜索。

1、让JAVA的JDBC支持命名参数的SQL语句JAVA 的JDBC连接数据库时,传递参数的方式是通过索引位置实现(根据SQL中?号出现的顺序,例如SELECT * FROM table WHERE name =? OR title=?);这让使用SQL语句变得比较麻烦也不符合使用习惯。为此专门创建了一个类NSQL用于支持命名方式给SQL语句传递参数(例如SELECT * FROM table WHERE name =?name OR title=?title)。其基本原理是,以?号为参数标识,后跟参数名称,在编写SQL语句时候采用命名参数方式,然后由NSQL类将其分析后生成JDBC可用的基于?号

2、顺序的SQL语句,同时记录参数顺序。这样既可实现命名参数的SQL语句。乐淘棋牌http:/代码如下所示:?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181

3、19120121122123124125126127128129130131132/* 2017年2月16日*/package com.kiy.service.data;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/* SQL语句抽象,提供基于命名参数的SQL语句功能* * autho

4、r Simon(ZhangXi)*/public final class NSQL / 静态集合缓存使用过的NSQLprivate static Map caches = new ConcurrentHashMap();private String sql_naming;private String sql_execute;private String names;private NSQL() / 用户不能实例化对象/ 通过get方法获取可用实例public boolean hasName() return names.length 0;public void setParameter(Pre

5、paredStatement ps, String name, Object value) throws SQLException for (int a = 0, b = names.length - 1; a = b; a+, b-) if (namesa.equals(name) ps.setObject(a + 1, value);if (a != b & namesb.equals(name) ps.setObject(b + 1, value);public void setParameters(PreparedStatement ps, Map values) throws SQL

6、Exception for (int index = 0; index names.length; index+) ps.setObject(index + 1, values.get(namesindex);/* 获取用于数据库执行的SQL语句* * return*/public String getSql() return sql_execute;/* 获取用户定义的命名SQL语句* * return*/public String getNamingSql() return sql_naming;/* 获取对象实例,此方法将缓存分析过的SQL语句以提高性能* * param sql* re

7、turn*/public static NSQL get(String sql) NSQL nsql = caches.get(sql);if (nsql = null) nsql = NSQL.parse(sql);caches.put(sql, nsql);return nsql;/* 分析命名SQL语句获取抽象NSQl实例;java(JDBC)提供SQL语句命名参数而是通过?标识参数位置,638棋牌游戏http:/* 通过此对象可以命名参数方式使用SQL语句,命名参数以?开始后跟名称?name。* 例如:SELECT * FROM table WHERE name = ?key AND

8、email = ?key;* * param sql* return*/public static NSQL parse(String sql) / SELECT * FROM table WHERE name = ?key AND email = ?key;/ AZ az 019 _if (sql = null)throw new NullPointerException(SQL String is null);char c;List names = new ArrayList();StringBuilder sql_builder = new StringBuilder();StringB

9、uilder name_builder = new StringBuilder();for (int index = 0; index sql.length(); index+) c = sql.charAt(index);sql_builder.append(c);if (? = c) while (+index = a & c = A & c = 0 & c = 9) name_builder.append(c); else sql_builder.append(c);break;names.add(name_builder.toString();name_builder.setLengt

10、h(0);NSQL dbsql = new NSQL();dbsql.sql_naming = sql;dbsql.sql_execute = sql_builder.toString();dbsql.names = names.toArray(dbsql.names = new Stringnames.size();return dbsql;public String toString() return NAMING: + sql_naming + nEXECUTE: + sql_execute;NSQL类的使用如下所示:?12345678910111213141516171819202122public boolean CreateUser(User u) NSQL sql1 = NSQL.get(INSERT INTO users (id,name,password,enable,realname,mobile,phone,email,remark,created,u

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 数据库

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号