java多条件查询问题
Stringname=p.getName();Stringsql="SELECT*FROMperson,hobbyWHEREperson.id=hobby.person_...
String name = p.getName();
String sql = "SELECT * FROM person,hobby WHERE person.id=hobby.person_id";
if(p.getId() != null && !p.getId().equals("")){
sql=sql+" and person.id="+p.getId();
}
if(name != null && name != ""){
sql=sql+" and person.name="+"'name'";
}
我想做多条件查询,但是name是string类型,SELECT * FROM person,hobby WHERE person.id=hobby.person_id AND person.id=35 AND person.name='name'
name的值“苟富贵”总是不显示,传过去的总是'name'谁知道怎么写sql=sql+" and person.name="+"'name'";这里 展开
String sql = "SELECT * FROM person,hobby WHERE person.id=hobby.person_id";
if(p.getId() != null && !p.getId().equals("")){
sql=sql+" and person.id="+p.getId();
}
if(name != null && name != ""){
sql=sql+" and person.name="+"'name'";
}
我想做多条件查询,但是name是string类型,SELECT * FROM person,hobby WHERE person.id=hobby.person_id AND person.id=35 AND person.name='name'
name的值“苟富贵”总是不显示,传过去的总是'name'谁知道怎么写sql=sql+" and person.name="+"'name'";这里 展开
4个回答
展开全部
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";
Map<String, Object> map=new LinkedHashMap<String, Object>();//保持添加顺序
// Map<String, Object> map=new HashMap<String, 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> List<T> dbSearch(Class typeClass,Map<String, Object> map,String orderby) {
String paths[] = { "ams-servlet.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
List<T> 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条件
}
Set<Entry<String, 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 BeanPropertyRowMapper<T> (typeClass));
return TList;
}
public static void main(String[] args) {
MultiTaskSearch mt=new MultiTaskSearch();
Map map=mt.search();
String orderby=" order by addTime desc";
List<Agent> 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
网站或各类管理系统都会用到搜索,会用到一个或多个不确定条件搜索,单条件搜索比较简单,有时候会有多个条件共同查询,如果系统中已经提供了相关的方法供你使用最好,像我做这老系统改版,需要添加搜索,就要自己写了。开始也没管那么多,就是拼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";
Map<String, Object> map=new LinkedHashMap<String, Object>();//保持添加顺序
// Map<String, Object> map=new HashMap<String, 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> List<T> dbSearch(Class typeClass,Map<String, Object> map,String orderby) {
String paths[] = { "ams-servlet.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
List<T> 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条件
}
Set<Entry<String, 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 BeanPropertyRowMapper<T> (typeClass));
return TList;
}
public static void main(String[] args) {
MultiTaskSearch mt=new MultiTaskSearch();
Map map=mt.search();
String orderby=" order by addTime desc";
List<Agent> 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
展开全部
字符串要用单引号引起来。
String name = p.getName();
String sql = "SELECT * FROM person,hobby WHERE person.id=hobby.person_id";
if (p.getId() != null && !p.getId().equals("")) {
sql = sql + " and person.id='" + p.getId() + "'";// ID是字符串
}
if (name != null && name != "") {
sql = sql + " and person.name=" + "'" + name + "'"; // Name是字符串
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2017-09-18
展开全部
网站或各类管理系统都会用到搜索,会用到一个或多个不确定条件搜索,单条件搜索比较简单,有时候会有多个条件共同查询,如果系统中已经提供了相关的方法供使用最好,,需要添加搜索,就要自己写了。
但是,也可以用拼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。
但是,也可以用拼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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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";
Map<String, Object> map=new LinkedHashMap<String, Object>();//保持添加顺序
// Map<String, Object> map=new HashMap<String, 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> List<T> dbSearch(Class typeClass,Map<String, Object> map,String orderby) {
String paths[] = { "ams-servlet.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
List<T> 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条件
}
Set<Entry<String, 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 BeanPropertyRowMapper<T> (typeClass));
return TList;
}
public static void main(String[] args) {
MultiTaskSearch mt=new MultiTaskSearch();
Map map=mt.search();
String orderby=" order by addTime desc";
List<Agent> 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
@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";
Map<String, Object> map=new LinkedHashMap<String, Object>();//保持添加顺序
// Map<String, Object> map=new HashMap<String, 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> List<T> dbSearch(Class typeClass,Map<String, Object> map,String orderby) {
String paths[] = { "ams-servlet.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
List<T> 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条件
}
Set<Entry<String, 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 BeanPropertyRowMapper<T> (typeClass));
return TList;
}
public static void main(String[] args) {
MultiTaskSearch mt=new MultiTaskSearch();
Map map=mt.search();
String orderby=" order by addTime desc";
List<Agent> 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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询