在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>技术论坛>软件开发>F0135178 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入

论坛首页
|--web开发
   |--ASP
   |--JSP
   |--ASP.net
   |--DHTML
   |--RUBY
|--软件开发
   |--C++
      |--Code here
   |--JAVA
   |--VB
   |--Delphi
   |--XML
|--.net技术
   |--C#
   |--VB.net
|--Yup开发组
|--站务&投诉
   |--站长专区
|--硬件&网络
|--休息室
|--数据库技术
 进入精华区 我要发言



 miles帮帮忙,也许只有你能帮我...back to 软件开发 forum  
作者:VBEND,8级分数:40
日期:2005/3/27 12:04:00类别:软件开发, 技术问题
回复:11次浏览:2524次
状态:已结贴 [miles(40)]

在做一个人事管理系统,但在查询中要求多重条件查询.
就是定了一个条件后,点追加条件还可以AND 或是OR 另一个条件.如果不够还可以追加另一个条件.当然也可以删除其中任一个条件.
   
    就是做这样一个多条件查询的模块.请帮帮忙,希望能提供一下示例代码.

reply[F0135178]
 



 
 re [1] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- miles05-03-28 14:25  

这个实现起来可简可繁阿。简单的说,就是传一个条件的字符串数组进去,然后拼接起来。比如:
String[] conditions = new String[] {"id = 5", "sex = 'male', "age > 20"};

然后进入函数里面for循环把他们用and连接起来拼成where子句。

reply[F0135202]
 



 
 re [2] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- VBEND05-03-28 21:06  

我现在遇到的问题是.

比如有几个不同类型的字段.

姓名---字符型.
年龄---整型.
出生---日期型
等等.

我在增加一个OR 或是AND条件时,如何判断这个新增加的条件是合法的.输入值现在是能接收任何字符串.
如选择字段:出生,再选操作:>,再输入值:"我我乱输"
这样新增的条件就是 出生>"我我乱输",这显然是不合法的,怎么能合理的解决这个问题.

reply[F0135238]
 



 
 re [3] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- miles05-03-29 09:27  

明白你的意思。就是说首先要在数据类型上如何匹配。如果你用的是强类型,可以动态检查类型的语言,至少有两个方向:

1。由调用者决定类型。比如你的类有这样的方法:
addCriteria(String fieldName, Condition condition, Object value)
那么,就可以通过value的类型,决定加入的condition是
fieldName = 'value'
fieldName = value
还是
fieldName = timestamp'value'
这样做的好处是简单,而且控制力较强

2。可以读取数据表的metadata,通过他得知指定字段类型。很多技术都支持这个方式,只不过方便程度不同罢了。当用户调用一次
addCriteria(String fieldName, Condition condition, Object value)
时候,我们通过表名和fieldName就可以知道这个field应该是什么类型,如何处理这个条件。这样做当然比较方便,但是效率上可能差一点,再就是调用者的控制力要弱些。

另外,关于sql语句本身,java和.net的prepare statement/参数化sql语句我觉得还是风险比较小的方式。这种方式最不容易产生sql注入漏洞。

reply[F0135245]
 



 
 re [4] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- VBEND05-03-29 18:55  


  上边的问题我用你我方法来做可行,不过移植性好象差点,本来我想做成一个通用的组件...现在只好将就用了.

  现在又遇到一个要命的问题,我想用户选择的字段是在软件界面上是中文.比如数据据中的字段是name我想用户操作时显示的就是姓名.

  还有要把软件操作中的> = < 显示为大于,等于,小于,OR,AND 显示为或者,并且.但是在生成SQL语句时还是要> = < or and.问题就是如何来转换这些东东.

  这个可难倒我了,再请帮我支支招,解决这个,这个模块就差不多了.

  先谢了.

reply[F0135272]
 



 
 re [5] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- miles05-03-30 09:10  

想做的灵活就得多花些功夫了,一劳永逸总是不容易嘛。

不很清楚你的这个中英文转换是有限数量的转换还是不可知数量的转换,如果是前者,只需要做一个Map,映射一下就是了。如果是后者就很麻烦。用户选择字段或者条件,反正位置固定,映射应该很容易处理。

我的经验是组件往往很难做到面面俱到,所以不用做的太过复杂。比如这个映射,可以用另一个组件稍微包装一下,分担一下工作。实际上这个转换的需求并不是经常有的,也没必要放在一起。

reply[F0135276]
 



 
 re [6] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- VBEND05-03-30 13:53  

逻辑下拉框要转  AND--并且,OR--或者
操作下拉框要转  >--大于,<--小于,=--等于
每增加一个条件就要处理一个条件中的这些转换.

另外,能不能给我一点提示,Map 映射 怎么做啊?

reply[F0135281]
 



 
 re [7] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- miles05-03-31 09:05  

就是让>和“大于”之间有联系。比如:

Map map=new HashMap();
map.put(">", "大于");
map.put("=", "等于");
...

将来用
map.get(">")
就可以得到
“大于”
了。

大概就是这个意思

reply[F0135294]
 



 
 re [8] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- VBEND05-03-31 22:45  

明白.

我只想到如果用设定好的映射.(在类中用固定数组.)

但是如果以后来增加或删除映射成员怎么实现.

还有HashMap();是点NET内制的吗?

reply[F0135316]
 



 
 re [9] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- miles05-04-01 09:05  

当然,如果想灵活,就需要在外部维护这个mapping,比如在xml中,或者文本文件什么的。

我这里用的HashMap是java.util.HashMap,不过.net也有对应的,名字也类似,用法基本一样。

reply[F0135319]
 



 
 re [10] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- VBEND05-04-01 13:20  

OK,这个查询模块基本上搞定了,只是没做到以前打算的哪边灵活.

还是谢谢miles.

reply[F0135335]
 



 
 re [11] miles帮帮忙,也许只有你能帮我...软件开发 forum  
- miles05-04-04 11:59  

不客气 glad that i could help.

reply[F0135400]
 



您的位置
  (c)2000-2019 Yup Studio, all rights reserved.  
164.0625