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'
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'
相关文章推荐
- <码农进阶> 解析sql语句中参数名然后根据发射获取对应参数值
- SQL文的管理和解析(一)利用Spring的Resource管理SQL的XML配置文件
- zabbix登山路——简单监控_各项参数解析
- T-SQL语法1有效地查询参数
- SQL语法整理[3]——表的管理
- MongoDB 与 SQL 的简单语法对比
- MyBatis源码(五)之动态Sql解析运行阶段参数处理
- SQL常用语法回忆及备忘之表的创建及管理 - 1
- 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)
- MyBatis之SQL语句映射文件增删改查和Java参数如何对应
- resteasy 参数简单解析
- 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)
- 使用 SqlHelperParameterCache 类管理参数
- 简单高效防注入攻击的动态多参数、动态SQL语句拼接方法,提高网站的安全性
- JAVA - Sql解析工具jsqlparser简单使用
- 动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
- PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询二:SQL解析为parsetree
- IP地址对应的物理位置简单地解析出城市
- sql语法和MongoDB语法的对应关系
- 目前sql语法尚不支持的多列(元组)in的替换实现、分组取前n名