java - 使用 "in"运算符的 Android 查询不起作用

标签 java android sql sql-server-2008-r2

我有以下代码:

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/

相关文章:

java - 如何从非 Context 类获取 SharedPreferences 并且不使用非最终静态变量?

php - 随机排序php数组

sql - SQL 归档存储过程的最佳实践

c# - 是否可以写出一个 C# double 并用 Java 读取它?

java - HashMap 数组

Java:RoundingMode 错误 - 找不到符号

php - 从表mysql php中选择唯一记录

java - 如何修复 EXE4J_JAVA_HOME, No JVM could be found on your system 错误?

java - AndroidDriver 无法解析为类型

android - AAPT2 aapt2-3.2.1-4818971-windows 守护进程 #0