
正文
多条件筛选java代码 多条件筛选java代码
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java多条件查询问题
java多条件不定条件查询
网站或各类管理系统都会用到搜索,会用到一个或多个不确定条件搜索,单条件搜索比较简单,有时候会有多个条件共同查询,如果系统中已经提供了相关的方法供你使用最好,像我做这老系统改版,需要添加搜索,就要自己写了。开始也没管那么多,就是拼sql,但是后来发现要加搜索地方不少,总是这样写既增加了工作量,还要做很多重复工作,说不定以后还会做这样的工作,所以还是写一个比较通用的查询方法。
package com.test;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.poi.hssf.record.formula.functions.T;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import com.ams.bo.webapi.dto.Agent;
public class MultiTaskSearch {
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Resource(name = "storeFrontDAO")
private Map search() {
String name="公司";
String email="@163";
String invoiceTitle="公司";
int sign=1;
String at="2012-04-26";
MapString, Object map=new LinkedHashMapString, Object();//保持添加顺序
// MapString, Object map=new HashMapString, Object();//无固定顺序
map.put("name like", name);
map.put("email like", email);
map.put("invoiceTitle like", invoiceTitle);
map.put("sign =", sign);
map.put("addtime=", at);
return map;
}
public T ListT dbSearch(Class typeClass,MapString, Object map,String orderby) {
String paths[] = { "ams-servlet.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
ListT TList=null;
String tablename = typeClass.getName().substring(
typeClass.getName().lastIndexOf(".") + 1);
StringBuffer sql=new StringBuffer("select * from ");
sql.append(tablename);
if (map.size()!=0) {
sql.append(" t where 1=1");//后面只需拼接and条件
}
SetEntryString, Object set=map.entrySet();
Iterator iterator=set.iterator();
for (int i = 0; i set.size(); i++) {
Map.Entry mapEntry=(Entry) iterator.next();
if (!"".equals(mapEntry.getValue().toString())) {
//模糊匹配
if (mapEntry.getKey().toString().contains("like")) {
// sql.append(" and t."+mapEntry.getKey()+" "+mapEntry.getValue()+" ");
sql.append(" and t."+mapEntry.getKey()+" '%"+mapEntry.getValue()+"%'");
//精确匹配
}else {
// sql.append(" and t."+mapEntry.getKey()+" '%"+mapEntry.getValue()+"%'");
sql.append(" and t."+mapEntry.getKey()+" "+mapEntry.getValue()+" ");
}
}
}
if (null!=orderby!"".equals(orderby)) {
sql.append(orderby);
}
System.out.println("SQL:"+sql.toString());
TList=jdbcTemplate.query(sql.toString(),new Object[] {}, new BeanPropertyRowMapperT (typeClass));
return TList;
}
public static void main(String[] args) {
MultiTaskSearch mt=new MultiTaskSearch();
Map map=mt.search();
String orderby=" order by addTime desc";
ListAgent agents=mt.dbSearch(Agent.class, map,orderby);
for (Agent agent : agents) {
System.out.println(agent.getName());
}
System.out.println("****************"+agents.size());
}
}
或者可以用拼sql的方法实现
使用union关键字可以在一个文本框内搜索出多个条件的数据
select t1.* from
(
select * from agent where name like '"2%'
union
select * from agent where email like '"2%'
union
select * from agent where ContactPerson like '"2%'
) t1
这种查询结果是所有的集合,也可以把union换成or
相关问答
Q1: java web后台实现多个条件的过滤(多个条件的交集)
那你就多做几个对象,如每个商品为一个对象,把所有的信息放进去,之后放进一个list里面,循环条件判断,符合条件的输出对象,用get方法获取就行了.这个说的就比较直白了。
复杂的你也可以放到group里面,之后在这个group对象里面放上商品对象。思路就是这样的,这个实现不是很难吧
Q2: java语言实现满足多条件匹配简单过滤输出问题
package zhidao;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;
public class Combin
{
private static String line = System.getProperty ("line.separator");
private static LinkedListString[] recursionSub ( LinkedListString[] list, int count, String[] array, int ind,
int start, int... indexs )
{
start++;
if (start count - 1)
{
return null;
}
if (start == 0)
{
indexs = new int[array.length];
}
for ( indexs = ind; indexs array.length; indexs++ )
{
recursionSub (list, count, array, indexs + 1, start, indexs);
if (start == count - 1)
{
String[] temp = new String[count];
for ( int i = count - 1; i = 0; i-- )
{
temp[start - i] = array[indexs[start - i]];
}
boolean flag = true;
L: for ( int i = 0; i temp.length; i++ )
{
for ( int j = i + 1; j temp.length; j++ )
{
if (temp[i] == temp[j])
{
flag = false;
break L;
}
}
}
if (flag)
{
list.add (temp);
}
}
}
return list;
}
private static void filter ( LinkedListString[] list ) throws IOException
{
File file = new File ("c:/116.txt");
FileWriter fw = new FileWriter (file);
for ( String[] strings : list )
{
int count1 = 0, count2 = 0, count3 = 0;
String temp = Arrays.toString (strings).replaceAll ("[\\[\\]\\s]", "");
if (temp.contains ("01"))
{
count1++;
count3++;
}
if (temp.contains ("02"))
{
count1++;
count2++;
}
if (temp.contains ("03"))
{
count1++;
}
if (temp.contains ("06"))
{
count2++;
count3++;
}
if (temp.contains ("08"))
{
count2++;
count3++;
}
if (temp.contains ("09"))
{
count2++;
count3++;
}
if (temp.contains ("07"))
{
count3++;
}
if (temp.contains ("10"))
{
count3++;
}
if (temp.contains ("11"))
{
count3++;
}
if (count1 = 1 count1 = 2 count2 = 1 count2 = 3 count3 = 0 count3 = 2)
{
fw.write (temp + line);
}
}
fw.flush ();
fw.close ();
}
public static void main ( String[] args ) throws IOException
{
String[] A = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11" };
LinkedListString[] list = new LinkedListString[] ();
recursionSub (list, 6, A, 0, -1);
// 假定从1-11这11个数字中任选6个全组合输出(每行输出6个不相同数字,并且从小到大排列)
for ( String[] strings : list )
{
String temp = Arrays.toString (strings).replaceAll ("[\\[\\]\\s]", "");
System.out.println (temp);
}
// 将第一问得到数据过滤,并且同时满足下面3条条件就输出,输出结果用"116.txt"保存在C盘
filter (list);
}
}
Q3: Java中数据库实现多条件查询(条件是不确定的,可以是一个,两个,三个,四个,五个)!
你这样做输出SS语句调试看看,你会发现你输出的SQL语句有问题!
String ss="SELETE * FROM MESSAGE WHERE";
int i=1;char c='"';
if(na!=null)
{ss=ss+"AND 姓名='"+na+"'";i=0;
System.out.println(ss);
}
if(se!="")
{
if(i==0){ss=ss+"AND 性别='"+se+"'";i=0;}
else {ss=ss+"AND 性别='"+se+"'";i=1;}
}
if(xi!="")
{
if(i==0){ss=ss+"AND 系别='"+xi+"'";i=0;}
else {ss=ss+"AND 系别='"+xi+"'";i=1;}
}
if(zh!="")
{
if(i==0){ss=ss+"AND 专业='"+zh+"'";i=0;}
else {ss=ss+"AND 专业='"+zh+"'";i=1;}
}
if(ni!="")
{
if(i==0){ss=ss+"AND 年级='"+ni+"'";}
else {ss=ss+"AND 年级='"+ni+"'";}
}
ss=c+ss+c;
rs=sql.executeQuery(ss);
就拿第一个SQL语句来做示范,加入你的na值为abc,输出的SS是 SELETE * FROM MESSAGE WHEREAND 姓名= 'abc'
仔细一看就知道SQL语句上很严重的错误 WHERE 后面接了AND关键词
可以这样改:ss=ss+" " + "姓名='"+na+"'" +" " +"AND";
最后使用replaceAll('AND$', ")") 替换最后一个AND字符穿。或者使用字符创截取 去掉最后三个字符(AND)
Q4: java怎么实现多条件筛选
or (类型 i : list)
{
if (条件1 条件2){
System.out.println(i);
}
} 这个方法循环是可以的
多条件筛选java代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于多条件筛选java代码、多条件筛选java代码的信息别忘了在本站进行查找喔。








