日期:2014-05-18  浏览次数:20622 次

关于一个奇怪的查询要求,大家帮帮忙,没有分了
我有个表person(id,name,age,address,birthday) 其中age是int型,birthday是date类型的,
我现在要定义一个函数public List qry_person(String name,int age,String address),
当我想调用这个函数的时候,(如.qry_person('a',12,'guangdong')当然行,由于查询条件可填,可不填,如
不输入age,(.qry_person('a',,'guangdong')则会报错,请问现在我应该如何写public List qry_person(String name,int age,String address)这个函数,保证当我查询字段,有些参数不输入的时候,也能实现查询.

------解决方案--------------------
方法重载,定义两个qry_person。
public List qry_person(String name,int age,String address)
public List qry_person(String name,String address)
------解决方案--------------------
如果是jdk1.5,可以这样
public List qry_person(Object... args) {
//

qry_person("a",,"guangdong");//jdk1.5可以这样调用
函数里可以判断
if (args[1] == null) {
//do other select
}
全参数可以这样调用
qry_person("a",new Integer(12),"guangdong");


jdk1.4可以这样
public List qry_person(Object[] args) {
//

qry_person(new Object[]{"a ",,"guangdong"});//jdk1.4要这样调用
函数里可以判断
if (args[1] == null) {
//do other select
}

全参数可以这样调用
qry_person(new Object[]{"a",new Integer(12),"guangdong"});

说白了,这种情况下应该把你的参数放到一个数组或集合中,然后在函数里面进行判断。否则你就只能写重载函数,那就是你说的要写一大堆。


------解决方案--------------------
没有选上的话给它赋个空字符串,
qry_person(a ","","guangdong");
或者用正则表达式,把你的查询的所有关键字赋给一个String,像这样: 
String key = "arg0" + ",";
当然上面这个要写在迭代里面,在你用的时候用split()把这个字符串拆开,
由于我也是刚学不久,说的不对敬请原谅!
------解决方案--------------------
参数都传值,若项查询条件不填,则传一个定值,在方法里面对每个参数都加判断,改查询语句条件就行了。
假设查询条件都不填时,调用方法时给age传 -1 ,另外两项传个空值(“”)或其它数据,方法里面:

public List qry_person(String name,int age,String address) {
……
String sql="select 字段名 from 表 where 1=1 ";
if(!name.equals("")){
sql+=" and name like '"+name+"%'";
}
if(age != -1){
sql+=" and age="+age;
}
if((!address.equals("")){
sql+=" and address like '%"+address+"%'";
}
……
}

例如:查询条件都不填,调用时用
qry_person("",-1,"")
------解决方案--------------------
一般都用楼上的方法,
------解决方案--------------------
同一楼上的,拼接一个SQL
------解决方案--------------------
综合3楼和6楼,把所有参数封装到一个对象里面,然后以对象做为参数,在方法里面判断对象的属性构造查询语句
------解决方案--------------------
把所有参数作为属性集合成1个类,只要传这个类进去就能查询,如果类的某些属性为null则无视,全null则返回所有结果