//name字段名称,value字段的值
public List search(String[] propertyName, Object[] value) throws Exception{
List list=new ArrayList();
Connection conn = getConnection();
PreparedStatement ps=null;
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("select ydh,hdh,hytype,wpzl,wptj,ysfs,sfzdname,sfzdcode,mdzdname,mdzdcode,psyname,qskfname,qsdate from entry\n");
int len=propertyName.length;
//构建出多条件查询sql
for(int i=0;i<len;i++){
if(i==0){
sqlBuffer.append("where"+ propertyName[i] + "=" +value[i]+"\n");
}else{
sqlBuffer.append("and" + propertyName[i] + "="+value[i]+"\n");
}
}
ps = conn.prepareStatement(sqlBuffer.toString());
ResultSet rs = ps.executeQuery();
while(rs.next()){
String ydh = rs.getString(1);
String hdh = rs.getString(2);
String hytype = rs.getString(3);
String wpzl = rs.getString(4);
String wptj = rs.getString(5);
String ysfs = rs.getString(6);
String sfzdname = rs.getString(7);
int sfzdcode = rs.getInt(8);
String mdzdname = rs.getString(9);
int mdzdcode =rs.getInt(10);
String psyname = rs.getString(11);
String qskfname = rs.getString(12);
String qsdate = rs.getString(13);
list.add(ydh);
list.add(hdh);
list.add(hytype);
list.add(wpzl);
list.add(wptj);
list.add(ysfs);
list.add(sfzdname);
list.add(sfzdcode);
list.add(mdzdname);
list.add(mdzdcode);
list.add(psyname);
list.add(qskfname);
list.add(qsdate);
}
return list;
}
%>
<%
String ydh = request.getParameter("ydh");
String hdh = request.getParameter("hdh");
String sfzdcode = request.getParameter("sfzdcode");
String mdzdcode = request.getParameter("mdzdcode");
String qskfname = request.getParameter("qskfname");
String qsdate = request.getParameter("qsdate");
String[] str = new String[]{};
如何把前台的6个值传到数组中,而且如果是空值 就不传,主要实现的是多条件查询?
测试条件不太会写 ?麻烦大侠们 帮帮忙
%>
14 个解决方案
#1
stringbuffer sb = new stringbuffer();
sb.append(" select * from 表 where 1= 1 ");
for(int i =0 ; i <len i++){
if(propertyName != null && value != null ){
sb.append(" and" + propertyName[i] + "="+value[i] " );
}
}
是否是这样的意思?
#2
String sql = " select * from table where 1 = 1 ";
if (ydh != null && !"".equals(ydh)) {
sql += " and colname = '" + ydh + "' " ;
}
其他类似。。。
if (ydh != null && !"".equals(ydh)) {
sql += " and colname = '" + ydh + "' " ;
}
其他类似。。。
#3
[img=http://http://localhost:8080/back_entry/select.jsp][/img]
#4
你们可能理解错了我的意思了!
我的意思是怎么去写一个测试类,
但是测试的值要从前台页面中取,
我在取值的时候不知道如何把前台取到的值;为空的不放到数组中,不为空的值放到数组中
我的意思是怎么去写一个测试类,
但是测试的值要从前台页面中取,
我在取值的时候不知道如何把前台取到的值;为空的不放到数组中,不为空的值放到数组中
#5
json
#6
另一种方案是用字符串传递给action,然后split(空格 逗号 等)下,放到数组中。
#7
根据几个条件查询 可能有的条件为空 有的不为空 可能全是空 也可能都不为空。所以,先查询所有string sql=select * from ?where 1=1;然后判断后面的条件是否为空 如果不为空则sql+= 条件
#8
可以在action中给出是否为空的判断写sql
#9
可以放在一个map里、如果有值就放到map里
key 为你的 数据库表字段 value 为前台传递过来的值、
然后你在sql拼装的时候迭代map的key 和value就可以了、
key 为你的 数据库表字段 value 为前台传递过来的值、
然后你在sql拼装的时候迭代map的key 和value就可以了、
#10
通过ajax,把需要传递的参数传递过去啊,然后后台解析出结果,在通过JSON返回来,前台解析 ,然后显示
#11
问题解决了
#12
#13
几个点子都不错,楼主问题解决了,能否说说,怎样解决的
#14
改了方法,根据7楼那种差不多,拼接sql语句
#1
stringbuffer sb = new stringbuffer();
sb.append(" select * from 表 where 1= 1 ");
for(int i =0 ; i <len i++){
if(propertyName != null && value != null ){
sb.append(" and" + propertyName[i] + "="+value[i] " );
}
}
是否是这样的意思?
#2
String sql = " select * from table where 1 = 1 ";
if (ydh != null && !"".equals(ydh)) {
sql += " and colname = '" + ydh + "' " ;
}
其他类似。。。
if (ydh != null && !"".equals(ydh)) {
sql += " and colname = '" + ydh + "' " ;
}
其他类似。。。
#3
[img=http://http://localhost:8080/back_entry/select.jsp][/img]
#4
你们可能理解错了我的意思了!
我的意思是怎么去写一个测试类,
但是测试的值要从前台页面中取,
我在取值的时候不知道如何把前台取到的值;为空的不放到数组中,不为空的值放到数组中
我的意思是怎么去写一个测试类,
但是测试的值要从前台页面中取,
我在取值的时候不知道如何把前台取到的值;为空的不放到数组中,不为空的值放到数组中
#5
json
#6
另一种方案是用字符串传递给action,然后split(空格 逗号 等)下,放到数组中。
#7
根据几个条件查询 可能有的条件为空 有的不为空 可能全是空 也可能都不为空。所以,先查询所有string sql=select * from ?where 1=1;然后判断后面的条件是否为空 如果不为空则sql+= 条件
#8
可以在action中给出是否为空的判断写sql
#9
可以放在一个map里、如果有值就放到map里
key 为你的 数据库表字段 value 为前台传递过来的值、
然后你在sql拼装的时候迭代map的key 和value就可以了、
key 为你的 数据库表字段 value 为前台传递过来的值、
然后你在sql拼装的时候迭代map的key 和value就可以了、
#10
通过ajax,把需要传递的参数传递过去啊,然后后台解析出结果,在通过JSON返回来,前台解析 ,然后显示
#11
问题解决了
#12
#13
几个点子都不错,楼主问题解决了,能否说说,怎样解决的
#14
改了方法,根据7楼那种差不多,拼接sql语句