【查询】查询好像也可以很简单!
来源:互联网 发布:淘宝客二级域名 编辑:程序博客网 时间:2024/04/19 16:06
还是要先说一下范围:以数据库为主的程序,b/s结构。
查询嘛,对于我来说就是SQL语句 where 后面(group、order by 前面的)的内容,把这搞定了,查询也就搞定了。
查询的分类,借鉴运算符里的一个术语,我把查询分成了四类:单目查询、双目查询、多目查询、特殊查询。
一、单目查询:
1、col = 1; //数字类型的相等的查询
2、col = 'abc'; //字符串类型的相等的查询
3、col like '%abc%'; //字符串的模糊查询
4、col like 'abc%';
5、col like '%abc';
6、col like 'abc'; //好像没有用
7、col > 10; //数字类型的大于、小于的查询
8、col < 10;
9、col >= 10;
10、col <= 10;
单目查询基本就是这些了,如果还有其他的,欢迎补充,谢谢。
二、双目查询:
1、col between '1900-1-1' and '1901-1-1'; //主要用于时间段的查询。
2、col between 1 and 10; //数字类型的范围查询。
3、col > 1 and col <=10; //数字类型的范围查询。
4、col >= 1 and col < 10; //数字类型的范围查询。
5、col > 1 and col < 10; //数字类型的范围查询。
单目查询能想到的就是这些了,如果还有其他的,欢迎补充,谢谢。
三、多目查询:
1、col in (1,2,3); //多条件数字类型的or查询。比如,同时显示研发部和业务部的员工。
2、col in ('1','2','3'); //多条件字符串类型的or查询。
这个呢,表面上看是多目,但是由于一般会采用ChekcBoxList控件,所以呢会直接得到 "1,2,3"这样的值,所以又有点像单目查询,但是处理方式上有些不同。
四、特殊查询:
1、col is null; //查找为null的数据
2、col is not null; //查找不为null的数据
3、col in (select ID from table1 where ...); //子查询
其他,这里呢情况就很多了,对于这种情况就需要使用委托(事件、钩子),交给调用查询控件的部分来处理了。
前三种情况交给查询控件自己处理,第四种情况就要“委托”给别人了,这样即可以保证使用简单,又可以保证灵活性。那么代码怎么实现呢?就是说上面的这些情况怎么抽象出来呢?很简单,利用Dictionary来做。
我们定义一个Dictionary来存放“查询方式”。
我们来制定一个编号来作为key值,我们可以规定 1-99表示单目查询;101-199表示双目查询;201-299表示多目查询;301表示特殊查询。然后我们填充Dictionary
看到这里您可能已经想到了,下一步我们只要做一个替换就可以了。
{0}替换成字段名称,
{1}替换成第一个关键字,
{2}替换成第二个关键字就可以了.
当然有些地方还需要做一点点处理。用Dictionary的目的就是可以方便的扩展查询方式。假设原来没有 col > 1 and col <=10; 这种查询方式,那么只要add一个就可以了。
好了查询方式、查询规则已经设定好了,那么字段名和字段值怎么获取呢?
我们在做表单控件的时候已经完成了这几个步骤,表单控件可以自动绘制UI,拥有字段名称,提取用户输入的信息,那么查询控件就可以利用这些现有的功能,看下图。
我们在设计表单控件的的时候,就已经预留出来了,把这些公用的功能都放在了 BaseForm 里面,查询控件只需要继承这个类就可以拥有字段名和字段值,还有绘制UI的功能了。
字段名称和字段值保存在BaseColumnsInfo类里面,在查询控件里面直接使用就可以了,BaseColumnsInfo里面还有一个查询方式的属性,就是上面定义的编号。
然后我们根据查询方式来替换一下就可以了。
我没有使用实体类,所以也不知道使用实体类的方式如何来实现查询,所以呢,目前只是针对SQL语句来做查询功能,得到了SQL语句(where后面的),也就达到了我的目的。
说了这么多,好像有点晕,我想让查询控件做下面几件事情:
1、绘制UI,就是自动添加文本框的控件。
2、布局,多行多列的方式显示。
3、提取用户输入的数据。
4、根据查询方式拼接成SQL语句。
其中前三条和表单控件一样,所以就抽出来一个基类BaseForm,在BaseForm里面实现,查询控件只实现第四条就可以了。
源代码下载,代码还比较粗糙,没有整理,还有一些不合理的地方。我想先把搭架子搭建起来,然后在完善细节。
http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html
- 【查询】查询好像也可以很简单!
- 没有索引也可以快速查询
- 原来order by 中也可以使用子查询
- 菜鸟自己也可以会写查询功能
- 菜鸟自己也可以会写查询功能
- inner join也可以算着查询条件
- ORACLE Logmnr用法,查询redolog,当然也可以查询archivelog,查看气质时间或scn
- JQuery Validate,验证也可以很简单
- combogrid使用javascript及java做出既可以全部查询也可以模糊查询并显示的效果
- 1001: 好像很简单的
- 简单查询
- 简单查询
- 简单查询
- 简单查询
- 简单查询
- 简单查询
- 一个简单的Tk界面(可以录入和查询)
- mysql也可以查询今天、昨天、7天、近30天、本月、上一月的数据
- 实体类的变形【2】—— 行列转换
- 遨游浏览器2与Google的chrome
- 实体类的变形【1】—— 餐盘原理
- 分层、实体类与耦合!
- 昨天去爬香山了!
- 【查询】查询好像也可以很简单!
- 直接用IE浏览网页 VS 在“我的电脑”里访问网页——保存cookie的问题。
- IE6 VS IE7 ——显示大量控件时的表现
- 【实现】表单控件里的子控件的变化。
- 【思路】超级传送带——我的程序思路
- 08年奥运会的开幕式很【强势】——管你看懂看不懂,这是中华民族的文化和历史!
- 【实现】表单控件的UI布局,实现方式
- 【思路】表单控件和查询控件,整理一下思路。
- .net firamework 框架里面的控件的继承关系。