当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 使用XML封装数据库操作语句的实现

MSSQL
MS-sql 2005拒绝了对对象 ''xxx'' (数据库 ''xxx'',架构 ''dbo'')的 SELECT 权限的解决方法
MSSQL 2005 LOG备份webshell的方法
快速将珊瑚虫IP数据库转MS SQL2005的图文教程
sql2005 远程连接问题解决方法
SQLServer 2005 列所有存储过程的语句
SQL Server 2005 模板参数使用说明
Sql Server 2005 默认端口修改方法
SQL Sever 2005 Express 安装失败解决办法
sql2005 根据指定字段排序编号
监视SQLServer数据库镜像[图文]
sqlserver2008 拆分字符串
字符串聚合函数(去除重复值)
SQL Server 2005 同步复制技术
SqlServer2005 链接服务器用法
SQL2008中 阻止保存要求重新创建表的更改 的解决方法
sql rollup用法 小计汇总
SQLServer 2008 Merge语句的OUTPUT功能
SQLServer 2008 新增T-SQL 简写语法
SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解决方法
SQL2005 学习笔记 公用表表达式(CTE)

MSSQL 中的 使用XML封装数据库操作语句的实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 95 ::
收藏到网摘: n/a

 

在项目开发的过程当中,项目组开发成员的编程风格差异和数据库操作语句SQL的灵活性给项目组带来了越来越多的操作和维护难度。
比如:从user表中取出所有数据,有的人会写成“select * from user”,有的人会写成“select all from user”,虽然在操作中不会有任何的错误,但在其他人读程序的过程时就会产生不好的感觉。
如果这种程序差异在项目中的数量级很多,那么在开发的过程当中程序就会出现各种各样的风格,在维护的过程中就会拼命的挠头并诅咒那些当初写程序的人。

为了整篇文章的举例,现在我们在数据库中建立如下表
TBL_USER
USERID BIGINT
USERNAME VARCHAR(20)
PASSWORD VARCHAR(20)
CREATETIME DATE

TBL_USER_INFO
USERID BIGINT
EMAIL VARCHAR(64)
MOBILE VARCHAR(13)

一、分析

A、分析select语句

于是使用XML来封装数据库操作语句成为项目规范化操作的第一步骤。在这个步骤中,我们将举几个例子来逐步实现封装的目的。
比如 “ SELECT USERNAME, PASSWORD FROM TBL_USER ” 这个语句,分析成XML文件时可以有各种各样的写法,我们现在使用如下的表达方式:
分析(1)
1 <dbtrans name=“selectUser” table=“TBL_USER” method=“select”>
2 <get>
3 <property name=“username” type=“string”/>
4 <property name=“password” type=“string”/>
5 </get>
6 </dbtrans>
在第一行的句子中使用 dbtrans 为节点名称,
属性name为这个交易的名称,这里为“selectUser”,
属性table为索取表的名称,这里为“TBL_USER”,
属性method为操作数据库的方法,这里为“select”,
子节点<get></get>意思为从数据库读取数据。
子节点<property />为读取的数据库字段,其中:
属性name为字段的名字,
属性type 为字段的类型,这里设置类型在后面的程序中可以体现出来。

对于“SELECT USERNAME, PASSWORD FROM TBL_USER WHERE USERID=123”语句,我们根据上述的分析,则可将XML描绘为:
分析(2)
1. <dbtrans name=“selectUserByKey” table=“TBL_USER” method=“select”>
2. <key>
3 <property name=“userid” type=“long”/>
4 </key>
5 <get>
6 <property name=“username” type=“string”/>
7 <property name=“password” type=“string”/>
8 </get>
9 </dbtrans>
如果使用的是like操作,我们可以将第3句描述成为<property name=“username” type=“string” match=“like”/>

对于“SELECT USERNAME, PASSWORD FROM TBL_USER ORDER BY USERNAME DESC”这个语句,XML如下分析:
分析(3)
1. <dbtrans name=”selectUser” table=”TBL_USER” method=”select”>
2 <get>
3 <property name=”username” type=”string”/>
4 <property name=”password” type=”string”/>
5 </get>
6 <order name="respcode" match="desc" />
7 </dbtrans>
这样的语句分析基本上可以完成了绝大部分的普通数据库的select语句的操作,但是毕竟还是会有一些我们无法预料的数据库操作语句会出现,比如
“SELECT USERNAME, PASSWORD FROM TBL_USER WHERE CREATETIME >‘2003-7-16’ AND CREATETIME<‘2003-9-16’”时,同时出现了CREATETIME在 <key>之中,这时我们可以将XML描绘成为:
<key>
<property name=“starttime” column=“createtime” type=“date” match=“>”>
<property name=“endtime” column=“createtime” type=“date” match=“<”>
</key>

但即使使用了以上的变通方法,还是会有很多的特殊语句是无法完成的,比如 “ SELECT COUNT(*) FROM TBL_USER ”, 这时的操作会出现使用XML语句无法描绘的时候,这个时候我们就可以引入了special这个属性,例如:
分析(4)
1  <dbtrans name=”selectUser” table=”TBL_USER” method=”select” special=”select count(*) from tbl_user”>
2  </dbtrans>
这个属性的意思是将所有的特殊交易都特殊表现出来。

B、分析INSERT语句

INSERT 语句在关系型数据库中操作可以说是最麻烦的一条语句了,因为如果你需要在TBL_USER和TBL_USER_INFO表中建立一条对应的数据时,你需要知道插入数据库的主键的值,在JDBC3.0中可以使用Statement.RETURN_GENERATED_KEYS来获取,但是如果为了兼容性考虑,我们在操作过程之中决定采用另一种办法来实现。
我们在数据库中建立一个表,名为:TSYS_PRIMARYKEY,其中包括三个字段,如下:
TSYS_PRIMARYKEY
KEYID BIGINT
TABLENAME VARCHAR(64)
PRIMARYKEY VARCHAR(30)
其中TABLENAME保存表名,PRIMA