您的位置:首页 > 理论基础 > 数据结构算法

SQL文的管理和解析(二)PrepareSQL----SQL参数替换的简单语法及对应的数据结构

2007-12-21 18:22 351 查看
在可配置的SQL中,必须是可以配置参数的。为了实现参数的配置,我们定义了两个语法。

1.":参数"语法
":参数"语法是SQL的基本语法,在实际的应用中,我们可以把冒号后的参数替换成需要的数值,这是SQL的基本语法。
例一:


SELECT T1.ACTIONID


FROM ACTIONINFO T1, FRAMEINFO T2, ACTIONAUTHORITY T3


WHERE T3.ROLEID = :roleID


AND T3.ACTIONID = T1.ACTIONID


AND T1.FRAMEID = T2.FRAMEID

如上,在实际的运行中,可以把":roleID"替换成输入的数值。

2.{:参数0 表达式 :参数1 表达式 :参数2 .......}语法
该语法的核心是{}。其中参数0是控制{}内能否执行的参数。如果参数0不存在,则{}内的所有语句都不执行,否则执行。参数1、参数2实际上是在参数0内部的,比如说参数0是一个Map,而参数1和2是Map中的对象。
例二:




FROM Certificate T1


WHERE 1 = 2


{:hashMap OR T1.hash =:hash AND T1.id=:id}

3.数据结构对应
(1)对语法1的数据结构
语法1的数据结构很简单,就是一个Map,里面有一个参数名和参数值,比如对例一中的参数,可以用以下方法放入参数:




HashMap <String, Object> params = new HashMap <String, Object>();


params.put(":roleid", "123456");

针对以上数据,SQL文会变成




SELECT T1.ACTIONID


FROM ACTIONINFO T1, FRAMEINFO T2, ACTIONAUTHORITY T3


WHERE T3.ROLEID = '123456'


AND T3.ACTIONID = T1.ACTIONID


AND T1.FRAMEID = T2.FRAMEID

(2)对语法2的数据结构
语法2的数据结构也是一个Map,不过稍微有点复杂,Map的key仍然是参数名,但是value会是Map或者是Map数组。对例二中的参数,可以用以下方法放入参数:




HashMap <String, Object> params = new HashMap <String, Object>();


HashMap <String, Object> params2 = new HashMap <String, Object>();


params2.put(":hash", "123");


params2.put(":id", "456");


params.put(":hashMap", param2);

SQL会转换成




FROM Certificate T1


WHERE 1 = 1


AND T1.hash ='123' AND T1.id='456'

如果放的是Map数组,则{}内的语句会重复,比如




FROM Certificate T1


WHERE 1 = 2


OR T1.hash ='123' AND T1.id='456'


OR T1.hash ='789' AND T1.id='ABC'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: