动态拼凑sql语句,where条件后的变量不是固定的解决办法

非常感谢不想要昵称,老紫竹群里的每个人都是那么的热情,只要我需要他们的时候,他们就会及时出现

我遇到个需求,在List里装着不知道几个字段,现在这些个字段都需要用在sql语句的where条件后,这样where条件后的字段就变成了动态的了,下面有两种实现办法

1:

StringBuffer sb = new StringBuffer();
  sb.append("SELECT * FROM kk.kkbm WHERE id = '").append(uid).append("' bm in (");
  for(int i = 0, k = sessionBMQX.size(); i < k; i++) {//sessionBMQX为List
      if(i > 0) {
          sb.append(",");
      }
      sb.append("'").append(sessionBMQX.get(i)).append("'");
  }
  sb.append(")");
  System.out.println("sql=========="+sb.toString());//输出这个sql语句,看有没语法错误

 2:第2种暂时没调试成功,想用的话可以自己调一下,第1种是正常的

StringBuffer sb = new StringBuffer();
  sb.append("SELECT * FROM kk.kkbm WHERE id = ? bm in (");
  System.out.println(sb.append("SELECT * FROM kk.kkbm WHERE id = ? and bm in ("));
  for(int i = 0, k = sessionBMQX.size(); i < k; i++) {
   if(i > 0) {
    sb.append(",");
    System.out.println(sb.append(","));
   }
   sb.append("?");
   System.out.println(sb.append("?"));
  }
  sb.append(")");
  System.out.println(sb.append(")"));
  try 
  {
   pstmt = dbc.getConnection().prepareStatement(sb.toString());
   pstmt.setString(1, uid);
   for(int i = 0, k = sessionBMQX.size(); i < k; i++) 
   {
    pstmt.setString(i + 2, (String) sessionBMQX.get(i));
   }
   rs = pstmt.executeQuery();
   System.out.println(sb.toString());
  }
  catch (SQLException e) 
  {
   e.printStackTrace();
  }

 

黑色头发  http://heisetoufa.iteye.com

如果发现本文有误,欢迎批评指正

你可能感兴趣的:(java)