崔艳荣 陈勇
摘要:该文分析了数据库查询技术的现状,提出了WEB模式下动态数据库综合查询技术,实现了动态查询列表的生成和动态查询条件的生成,并将该技术应用于基于Web模式的项目中,取得了很好的查询效果。
关键词:Web模式;动态列表;查询技术
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)05-0991-02
Dynamic Database Query Technology Based on Web Mode
CUI Yan-rong, CHEN Yong
(School of Computer and Science, Yangtze University, Jinzhou 434023, China)
Abstract: This paper has analyzed the present situation of the database query technology, and proposed the dynamic database query tech? nology based on Web mode, realized generation of the dynamic query list and the query condition, and this technology was applied in the project based on Web model, and achieved very good query effect.
Key words: Web mode; dynamic list; query technology
随着计算机网络的飞速发展,越来越多的应用系统都是基于Web模式开发的,在基于Web模式的应用系统中,数据查询频繁,数据库查询技术成为这类系统的一个关键技术。
1数据库查询技术现状
数据库查询技术已经被广泛应用到WEB程序开发中[1-4],例如高考成绩在线查询、OA系统中的人事信息查询等。一般来说,程序中利用用户提供的关键字段输入值作为查询条件,从而从数据表中查出符合条件的记录,并显示在客户端。例如高考成绩查询系统中根据用户提供的学生准考证号码从而提取出相应的记录并发回到客户端显示在WEB页面上。实际上这是一种小范围内的动态查询,查询指令是预先指定好并接受一个用户输入参数作为比较条件而进行查询的。然而,这种查询技术存在很大的局限性,如果用户不记得这个关键字的信息(如OA系统中的员工身份证号码为查询关键字)但知道其他很多非关键字的信息(如知道这个员工姓什么、性别、所在部门、大致住在哪个小区等),这时候就没办法查询所需的数据。基于此,提出一种WEB模式下交互式的动态数据库综合查询技术。
2 WEB交互查询技术
WEB模式下交互式的动态数据库综合查询技术是让用户指定任何多个组合条件并且由用户指定输出哪些特定字段的查询方法:利用一定的WEB交互式技术,让用户选择要输出的字段列表,同时由用户指定查询条件组合,然后根据用户的定义组合动态地生成查询指令,最后将查询结果集显示在客户端页面上。
2.1动态查询列表的生成
用一个具体的例子来说明这种查询技术,《居民病伤死亡原因统计网络直报系统》是一个实际工程项目,其数据库中有个card表,用来记录全国各个地区居民死亡者的信息,称为卡片表,其中的每一条记录都是一个死者的信息,表中有40多个字段,如数据年份、行政区划,死者姓名、性别、出生日期、死亡日期、死因代码(表示死亡的原因)、民族、职业、生前所在单位,生前所住地址、家属姓名、联系电话、死亡地点等。在项目中实现了根据用户指定的字段来返回结果的综合查询处理,即根据用户的选择字段列表和输入的条件组合动态生成查询语句(查询指令),数据表查询语句SQL的格式如下:
Select [字段1],[字段2],…,[字段n] from [数据表名] where条件
从上面的SQL语句中,要动态生成两个内容,分别为字段列表和条件。对应用系统来说,字段列表就是用户在页面上选择的那些字段组合,条件是用户一个一个增加进来的,程序的任务就是要获取这些用户输入的信息,然后根据这些信息经过一定的处理后合成相应的查询语句。具体方法如下:
document.all.ctl00_mianmb_ctj.value+=ztj;
tr=document.all.tjh.insertRow();
td=tr.insertCell().innerText=document.all.lj.value;
td=tr.insertCell().innerText=document.all.zd.value;
td=tr.insertCell().innerText=document.all.bj.value;
if(o=="date"||o=="birthdate"||o=="deathdate")
td=tr.insertCell().innerText=rq.substr(0,4)+"年"+rq.substr(4,2)+"月"+rq.substr(6,2)+"日"
else td=tr.insertCell().innerText=document.all.z.value
tr.style.cursor="hand";
tr.onmouseover=new Function("mov(this)");
tr.onmouseout=new Function("mot1(this)");
tr.name=ztj;
tr.onclick=new Function("del(this.name)");
tr.title="点击后删除本行条件";
gd.scrollTop=3000;
document.all.z.value="";
document.all.z.focus();
在生成查询语句前,先对用户的输入进行一些处理。为了能让用户自定义选择要查询显示的字段,应用系统把该表的所有字段都放在页面上,这里用到一个“翻译”的技术,原因是显示给用户看的字段名称并不是数据库字段的真实名称,因为效率和书写等多方面的原因,应用系统把字段名称设计成英文名称,但应用系统为了让更多的用户明白其代表的意思,所以在页面上提供给用户看到的是该字段的中文翻译名称,如前面提到的“死者姓名”这个字段在数据库中的名称是name,通过一个二维数组实现这个“翻译”的过程。例如用户点选的是“死者姓名”字段,但应用系统中记录的是和它对应的另外一维数据中的name,用一个初始化为空的新数组来记录用户的选择,用户每选择一个字段,应用系统就在这个新数组中增加一个数据,当用户取消选择的时候程序也同样地能去掉相应的数据,这样就实现了用户自定义列表字段的功能,最后程序用一条数组转换为字符串的语句实现SQL语句中的字段列表。
2.2动态查询条件的生成
得到了用户自定义的字段列表后,应用系统还不能生成完整的查询语句,还需要查询条件,下面说明动态生成查询条件的方法。
为了让数据表中的每一个字段都可以作为查询的条件,应用系统中设计一个下拉式选择列表框,以便让用户自由选择作为条件的字段,同时提供另外一个选择列表框,让用户确定这个条件加到总条件中的运算方式,只有两个选择,分别是“并且”和“或者”,从字面上很容易理解它们的意思,和前面所说的“翻译”一样,实际上用户的选择在程序中被翻译成了相应的标准条件组合代码and和or,含义是逻辑“与”和逻辑“或”。
用户选定字段后,接着给出此字段的比较条件,是相等还是大于等等,根据用户选取的字段的类型不同,比较条件的运算符也动态地生成所对应的运算选择列表框,假如用户选的是字符型字段,那么应用系统就提供等于、包含(用于模糊查询)、不等于等一系列条件运算符,假如用户选择的字段是数字型或日期型的字段,那么很显然用于字符型的比较运算符就不适用了(例如对于数字型的字段就不能用“包含”运算符),这时候应用系统动态地改变这个列表选择,使之提供适合于所选字段的比较运算符,对于数字型的字段提供等于、不等于、大于、不大于(小于等于)、小于、不小于(大于等于)等等。
同样地,应用系统设计了一个翻译器,把用户选择的比较运算符“翻译”成计算机能识别的标准SQL语句中的比较运算符(例如把等于翻译成=,大于翻译成>,包含翻译成like等)。最后输入用于和字段比较的条件值。做完这些后实际上只是完成了多个条件中的一个条件。用一个“按扭”把输入的这个条件增加到条件集中,重复上面的过程就完成了多个条件的输入,把这多个条件按输入顺序组合起来就生成了程序所需要的查询条件。
由于条件数量是没有限制的,所提供的字段也包括了要查询表中的全部字段,所以这样的方法就完全实现了用户自定义条件的综合查询。图1就是使用这种技术的具体应用结果。
图1 Web交互查询技术示例图中最上部是条件选择部分,用户可以根据查询需要自由组合条件,每增加一个条件就用一次增加,增加后的条件显示在中部右边的列表里,页面中部左边是整个表的字段列表,用户选中的字段为红颜色显示(再次点选已选中的字段则变成取消这个字段),所有条件都输入完成后可以点击“查询”按扭,程序开始根据用户的这些选择连接服务器数据库进行查询,并把所得到的结果返回页面。页面的下部就是根据这些条件从数据库中所查出的结果集,图例中符合这些条件的只有一条,所以只显示出这一条,当用户输入的条件很宽松(例如只输入一个死者姓名包含张)时,查询结果集中可能会有很多个记录,当用户输入的条件太过严格时(比如输入一个不存在的身份证号码),系统会提示没有满足条件的记录。
3结束语
总之,通过动态地构造SQL查询语句,能够做到任何条件组合的查询,同时也能实现任意挑选字段的显示,这种技术就是动态综合查询。利用这种技术,还可以实现更为复杂的查询,例如可以再增加一个表的选择,实现多表查询,也可以再增加特殊功能的查询,让具有一定数据库基础的用户实现更为复杂的自定义语句查询。此查询技术在大型项目中已经应用,取得很好的查询效果。
参考文献:
[1]姜跃.数据库查询方法优化研究[J].电脑知识与技术,2011,7(5):977-978,980.
[2]刘兵.基于Web服务的数据库查询[J].福建电脑,2007(2):141-141.
[3]冯本勇.数据库查询优化技术探讨[J].石家庄理工职业学院学术研究,2008,3(4):11-13.
[4]沈海峰.简论关系数据库的查询优化[J].淮北职业技术学院学报,2011,10(1):7-8.