非常感谢不想要昵称,老紫竹群里的每个人都是那么的热情,只要我需要他们的时候,他们就会及时出现
我遇到个需求,在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
如果发现本文有误,欢迎批评指正