【问题标题】:Adding several columns in update query在更新查询中添加几列
【发布时间】:2013-12-13 18:17:06
【问题描述】:

我试图通过动态查询更新一行中的几列。

columnnames 是一个 Arraylist,其中包含所选表的所有列的名称

Arrays.toString(row) 包含行应更新到的用户输入。

我在尝试运行时在列名处收到此错误消息:没有这样的列 [SNO,SNAME,STATUS,CITY]。我不知道有什么办法可以解决这个问题?

 query = "UPDATE " + tablename + " SET '" + columnnames  + "' = '" + Arrays.toString(row) + "' WHERE " + FirstColumn + " = '" + rowstandard + "'";

【问题讨论】:

    标签: java sql sqlite sql-update


    【解决方案1】:

    您需要分别更新每一列。您不能将它们都作为数组传递。

     query = "UPDATE " + tablename + " SET "
     foreach(int i=0; i< columnnames.length; i++)
     {
         query+= "'" + columnnames[i]  + "' = '" + row[i] + "',"
     }
     query = StripLastComma(query) //Not sure how to do this in Java.
     query +="' WHERE " + FirstColumn + " = '" + rowstandard + "'"
    

    【讨论】:

    • 看起来不错,只是不知道如何去掉最后一个逗号? ://
    • 在 C# 中是 query = query.Substring(0,query.length-1)。 Java 中也有类似的东西。
    【解决方案2】:

    这不起作用,因为 set 的语法是 SET ColumnA = :ValueA, ColumnB = :ValueB WHERE " + FirstColumn + " = '" + rowstandard + "'";

    【讨论】:

      【解决方案3】:

      正如所指出的,更新查询的正确语法是:

      UPDATE [LOW_PRIORITY] [IGNORE] table_reference
      SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
      [WHERE where_condition]
      [ORDER BY ...]
      [LIMIT row_count]
      

      Update syntax

      话虽如此,我会做这样的事情(使用guava):

      StringBuilder query = new StringBuilder();
      query.append("UPDATE " + tablename + " SET ");
      // build a map of col name/value
      Map<String, String> map = Maps.toMap(columnnames, new Function<String, String>(){
              @Override
              public String apply(String input){
                  return row[columnnames.indexOf(input)].toString();
              }
          });
      query.append(Joiner.on(",").withKeyValueSeparator("=").join(map));
      query.append(" WHERE " + FirstColumn + " = '" + rowstandard + "'");
      query.toString();
      

      【讨论】:

      • 好吧,我认为 bill gregs 解决方案对我的程序来说是最好的,但你知道我怎样才能摆脱最后一个逗号吗?因为我尝试将其打印出来,唯一破坏我的查询的是最后一个逗号
      • 在我的 - 没有这样的问题;)但如果你想摆脱最后一个逗号,你可以这样做:query = query.substring(0, query.lastIndexOf(",")); 你需要添加它而不是 `query = StripLastComma(查询)'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 2018-09-16
      相关资源
      最近更新 更多