Java 在更新查询中添加多个列

Java 在更新查询中添加多个列,java,sql,sqlite,sql-update,Java,Sql,Sqlite,Sql Update,我试图通过动态查询更新一行中的几列 columnnames是一个Arraylist,其中包含选定表的所有列的名称 toString(行)包含该行应更新到的用户输入 尝试运行此操作时,我在columnnames处收到此错误消息:没有此类列[SNO、SNAME、STATUS、CITY]。我不知道有什么办法可以解决这个问题 query = "UPDATE " + tablename + " SET '" + columnnames + "' = '" + Arrays.toString(row)

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

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

toString(行)包含该行应更新到的用户输入

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

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

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

 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 + "'"
query=“更新”+tablename+“设置”
foreach(int i=0;i
这不起作用,因为set的语法是set ColumnA=:ValueA,ColumnB=:ValueB,其中“+FirstColumn+”=““+”rowstandard+”;

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

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

话虽如此,我还是会这样做(使用):

StringBuilder查询=新建StringBuilder();
query.append(“UPDATE”+tablename+“SET”);
//构建列名称/值的映射
Map Map=Maps.toMap(columnnames,新函数(){
@凌驾
公共字符串应用(字符串输入){
返回行[columnnames.indexOf(输入)].toString();
}
});
query.append(Joiner.on(“,”).withKeyValueSeparator(“=”).join(map));
query.append(“其中”+FirstColumn+“=”“+rowstandard+””);
query.toString();

看起来很棒,我只是不知道如何去掉最后一个逗号?:/C#中的是query=query.Substring(0,query.length-1)。在Java中也是这样。我认为bill gregs解决方案对我的程序来说是最好的,但是你知道如何去掉最后一个逗号吗?因为我尝试打印出来,唯一破坏我查询的是最后一个逗号-没有这样的问题;)但是如果你想去掉最后一个逗号,你可以这样做:
query=query.substring(0,query.lastIndexOf(“,”);
您需要添加它,而不是'query=striplastcoma(query)'
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();