我有以下代码:
public void UpdateMessage(String[] mlst) {
// TODO Auto-generated method stub
try
{
String sql="update messagesmaster set rstamp = 1 where mid in (" + mlst + ") ";
statement = conn.createStatement();
statement.executeUpdate(sql);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
在这个 mlst 中是一个包含 7 个元素的字符串数组。
我想像这样形成我的查询:
String sql="update messagesmaster set rstamp = 1 where mid in ("sagar","dhanorkar","Ganesh") ";
但不幸的是,上面的尝试不起作用。
我使用的是 sqlserver 2008 r2
请指导我。
最佳答案
那是因为 String[].toString()
与将所有元素连接成一个有效的 SQL 字符串不同。
试试这个:
StringBuilder sb = new StringBuilder();
sb.append("update messagesmaster set rstamp = 1 where mid in (");
for (int i = 0;i < mlst.length; i++) {
if (i>0) sb.append(", ");
sb.append("'").append(mlst[i]).append("'");
}
sb.append(")");
String sql = sb.toString();
要更合理地使用 SQL(在性能和安全方面),请使用:
StringBuilder sb = new StringBuilder();
sb.append("update messagesmaster set rstamp = 1 where mid in (");
for (int i = 0;i < mlst.length; i++) {
if (i>0) {
sb.append(", ?");
} else {
sb.append("?");
}
}
sb.append(")");
String sql = sb.toString();
Cursor c = db.rawQuery(sql, mlst);
关于java - 使用 "in"运算符的 Android 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759900/