public static void main(String[] args) {
List<Map<String, Object>> params = new ArrayList<Map<String,Object>>();
Map<String, Object> param = new HashMap<String, Object>();
//查询条件
param.put("k", "user_name");
param.put("v", "'小美'");
param.put("rela", "=");
params.add(param);
//查询条件
param = new HashMap<String, Object>();
param.put("k", "mobile");
param.put("v", "18712345678");
param.put("rela", "=");
params.add(param);
//查询条件
param = new HashMap<String, Object>();
param.put("k", "age");
param.put("v", 33);
param.put("rela", "=");
params.add(param);
//如果我查询条件很多,这里要写一堆param吗?怎么写可以简洁一点??
query(params);
}
public List<Goddess> query(List<Map<String, Object>> params) throws Exception{
List<Goddess> result=new ArrayList<Goddess>();
Connection conn=DBUtil.getConnection();
StringBuilder sb=new StringBuilder();
sb.append("select * from imooc_goddess where 1=1 ");
if(params!=null&¶ms.size()>0){
for (int i = 0; i < params.size(); i++) {
Map<String, Object> map=params.get(i);
sb.append(" and "+map.get("name")+" "+map.get("rela")+" "+map.get("value")+" ");
}
}
PreparedStatement ptmt=conn.prepareStatement(sb.toString());
System.out.println(sb.toString());
ResultSet rs=ptmt.executeQuery();
Goddess g=null;
while(rs.next()){
g=new Goddess();
g.setId(rs.getInt("id"));
g.setUser_name(rs.getString("user_name"));
g.setAge(rs.getInt("age"));
g.setSex(rs.getInt("sex"));
g.setEmail(rs.getString("email"));
g.setMobile(rs.getString("mobile"));
result.add(g);
}
return result;
}
首先,请你告诉我你使用PreparedStatement的理由,为什么不使用Statement?二者有什么区别?
然后 你用到了PreparedStatement的特性了吗?
接下来我们在探讨这代码该怎么写。下面的代码仅供参考,基本不具有实践意义。
public static void main(String[] args) {
Map<String, Object> params = new HashMap<String, Object>();
param.put("user_name", "小美");
param.put("mobile", "18712345678");
param.put("age", "33");
// 如果传递条件不限于相等,则如下
// param.put("nick_name like=?", "小李");
// param.put("age=?", "33");
query(params);
}
public List<Goddess> query(Map<String, Object> params) throws Exception{
List<Goddess> result=new ArrayList<Goddess>();
Connection conn=DBUtil.getConnection();
StringBuilder sb=new StringBuilder();
sb.append("select * from imooc_goddess");
if(params!=null && params.keySet().size() > 0){
sb.append(" where 1=1");
Set<String> keySet = params.keySet();
for (String key : keySet) {
sb.append(" and "+key+"=?");
// 如果判断条件不是有等于可以如下
// sb.append(" and " + key);
}
}
PreparedStatement ptmt=conn.prepareStatement(sb.toString());
System.out.println(sb.toString());
if(params!=null && params.keySet().size() > 0){
Set<String> keySet = params.keySet();
int index = 0;
for (String key : keySet) {
index++;
Object value = params.get(key);
if(value instanceof String){
ptmt.setString(index, (String)value);
}else if(value instanceof Integer){
ptmt.setInt(index, (Integer)value);
}else if(value instanceof Date){
ptmt.setTimestamp(index, new Timestamp(((Date)value).getTime()));
}else{
//......
}
}
}
ResultSet rs=ptmt.executeQuery();
Goddess g=null;
while(rs.next()){
g=new Goddess();
g.setId(rs.getInt("id"));
g.setUser_name(rs.getString("user_name"));
g.setAge(rs.getInt("age"));
g.setSex(rs.getInt("sex"));
g.setEmail(rs.getString("email"));
g.setMobile(rs.getString("mobile"));
result.add(g);
}
return result;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。