Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android查询,带有;在;操作员不工作_Java_Android_Sql_Sql Server 2008 R2 - Fatal编程技术网

Java Android查询,带有;在;操作员不工作

Java Android查询,带有;在;操作员不工作,java,android,sql,sql-server-2008-r2,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

我有以下代码:

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") ";
但不幸的是,上述尝试并未奏效

我正在使用SQLServer2008R2


请告诉我。

这是因为
字符串[]。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();
StringBuilder sb=新建StringBuilder();
sb.append(“updatemessagesmaster set rstamp=1,其中mid in(“);
对于(int i=0;i0)sb.追加(“,”);
附加(mlst[i])。附加(“”);
}
某人加上(“)”;
字符串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);
StringBuilder sb=新建StringBuilder();
sb.append(“updatemessagesmaster set rstamp=1,其中mid in(“);
对于(int i=0;i0){
某人加上(“,?”);
}否则{
某人加上(“?”);
}
}
某人加上(“)”;
字符串sql=sb.toString();
游标c=db.rawQuery(sql,mlst);

这是因为
字符串[]。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();
StringBuilder sb=新建StringBuilder();
sb.append(“updatemessagesmaster set rstamp=1,其中mid in(“);
对于(int i=0;i0)sb.追加(“,”);
附加(mlst[i])。附加(“”);
}
某人加上(“)”;
字符串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);
StringBuilder sb=新建StringBuilder();
sb.append(“updatemessagesmaster set rstamp=1,其中mid in(“);
对于(int i=0;i0){
某人加上(“,?”);
}否则{
某人加上(“?”);
}
}
某人加上(“)”;
字符串sql=sb.toString();
游标c=db.rawQuery(sql,mlst);
带有“in”运算符的Android查询不工作

由于您使用的不是参数化语句,而是硬编码的解决方案,因此需要将值包装到单引号中:

where mid in ('" + mlst + "')
我不喜欢你的方法。它也不会工作,因为你的mlst是数组。它没有多少可读性和危险性。通常建议(我也建议)使用参数化语句,这些语句更安全,更易于阅读

占位符(?)必须在您的案例中动态生成

示例:

StringBuilder b = new StringBuilder("Update Test set col = value where mid IN(");
for (int i = 0; i < mlst.length; i++) {
   b.append("?");
   if (i < mlst.length - 1) {
      b.append(",");
   }
}
b.append(")");

PreparedStatement ps = connection.prepareQuery(b.toString());
for (int i = 0; i < mlst.length; i++) {
   ps.setString(i + 1, mlst[i]);
}
int result = ps.executeUpdate();
StringBuilder b=new StringBuilder(“更新测试集col=value,其中mid IN(”);
对于(int i=0;i
带有“in”运算符的Android查询不工作

由于您使用的不是参数化语句,而是硬编码的解决方案,因此需要将值包装到单引号中:

where mid in ('" + mlst + "')
我不喜欢你的方法。它也不会工作,因为你的mlst是数组。它没有多少可读性和危险性。通常建议(我也建议)使用参数化语句,这些语句更安全,更易于阅读

占位符(?)必须在您的案例中动态生成

示例:

StringBuilder b = new StringBuilder("Update Test set col = value where mid IN(");
for (int i = 0; i < mlst.length; i++) {
   b.append("?");
   if (i < mlst.length - 1) {
      b.append(",");
   }
}
b.append(")");

PreparedStatement ps = connection.prepareQuery(b.toString());
for (int i = 0; i < mlst.length; i++) {
   ps.setString(i + 1, mlst[i]);
}
int result = ps.executeUpdate();
StringBuilder b=new StringBuilder(“更新测试集col=value,其中mid IN(”);
对于(int i=0;i
mlst
是一个
字符串[]
对象,它是一个数组。如果您试图将它连接到字符串,那么最终将使用它的
toString()
方法,这不是您想要的。必须通过在数组中循环,从中生成一个
字符串
对象:

StringBuilder b = new StringBuilder();
for(String str : mlst) {
    b.append(str);
    b.append(", ")
}
// you have to remove the last , or do not add it in the first place

但是,这里存在一个设计缺陷:将任意值连接到查询,这可能导致SQL注入。我建议在盲目使用mlst作为参数之前,您应该对其进行清理。我记得Android中有一个参数绑定解决方案,您应该参考文档。

mlst
是一个
String[]
对象,它是一个数组。如果您试图将它连接到字符串,那么最终将使用它的
toString()
方法,这不是您想要的。必须通过在数组中循环,从中生成一个
字符串
对象:

StringBuilder b = new StringBuilder();
for(String str : mlst) {
    b.append(str);
    b.append(", ")
}
// you have to remove the last , or do not add it in the first place

但是,这里存在一个设计缺陷:将任意值连接到查询,这可能导致SQL注入。我建议在盲目使用mlst作为参数之前,您应该对其进行清理。我记得Android中有一个参数绑定解决方案,您应该参考文档。

这就是您要寻找的:

String[] mlst = { "sagar", "dhanorkar", "Ganesh" };

StringBuilder sb = new StringBuilder("update messagesmaster set rstamp = 1 where mid in (");

int size = mlst.length;

for (int i = 0; i < size; i++) {
    // adding the first quote
    sb.append("\"");
    // adding the word
    sb.append(mlst[i]);
    // adding the second quote
    sb.append("\"");

    // adding the comma
    if (i < (size - 1)) {
    sb.append(",");
    }
}

// closing
sb.append(");");

System.out.println(sb.toString());
String[]mlst={“sagar”、“dhanorkar”、“Ganesh”};
StringBuilder sb=new StringBuilder(“更新消息主设置rstamp=1,其中中间为(”);
int size=mlst.length;
对于(int i=0;i
这就是您要寻找的:

String[] mlst = { "sagar", "dhanorkar", "Ganesh" };

StringBuilder sb = new StringBuilder("update messagesmaster set rstamp = 1 where mid in (");

int size = mlst.length;

for (int i = 0; i < size; i++) {
    // adding the first quote
    sb.append("\"");
    // adding the word
    sb.append(mlst[i]);
    // adding the second quote
    sb.append("\"");

    // adding the comma
    if (i < (size - 1)) {
    sb.append(",");
    }
}

// closing
sb.append(");");

System.out.println(sb.toString());
String[]mlst={“sagar”、“dhanorkar”、“Ganesh”};
StringBuilder sb=new StringBuilder(“更新消息主设置rstamp=1,其中中间为(”);
int size=mlst.length;
对于(int i=0;i