Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 如何创建包含多个set子句的update语句?_Java_Mysql - Fatal编程技术网

Java 如何创建包含多个set子句的update语句?

Java 如何创建包含多个set子句的update语句?,java,mysql,Java,Mysql,我想创建一个包含多个set子句的update语句。问题是其中一些参数可能为null(不是所有参数)。我需要在这些语句之前加一些逗号,但我不知道如何有效地处理它。有没有办法做到这一点 UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; 这是我的职责 public static void update(value1, value2, value3){ String sql = "UPD

我想创建一个包含多个set子句的update语句。问题是其中一些参数可能为null(不是所有参数)。我需要在这些语句之前加一些逗号,但我不知道如何有效地处理它。有没有办法做到这一点

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
这是我的职责

public static void update(value1, value2, value3){
    String sql = "UPDATE table SET ";

    //I need to check if these values are not null then I need to add them to sql string.

    sql += " WHERE condition";
}
我的解决方案

int count = 0;
if(value1 != null){
    if(count == 0) {
        sql += "column1 = value1";
    } else {
        sql += ", column1 = value1";
    }
    count++;
}

if(value2 != null){
    if(count == 0) {
        sql += "column2 = value2";
    } else {
        sql += ", column2 = value2";
    }
    count++;
}

if(value3 != null){
    if(count == 0) {
        sql += "column3 = value3";
    } else {
        sql += ", column3 = value3";
    }
    count++;
}

尝试使用一个映射,其中键是列名,值是列值,如下所示:

public static String addSetValue(Map<String, Object> fieldMap) {
    StringBuilder  setQueryPart = new StringBuilder();
    for (Map.Entry<String, ? extends Object> entry: fieldMap.entrySet()) {
        if (entry.getValue() != null){
            setQueryPart.append(entry.getKey() + " = " +entry.getValue() + ", ");
        }
    }
    //Remove last comma, since we don't need it.
    setQueryPart.deleteCharAt(setQueryPart.lastIndexOf(","));
    return setQueryPart.toString();
}
公共静态字符串addSetValue(映射字段映射){
StringBuilder setQueryPart=新建StringBuilder();
对于(Map.Entry:fieldMap.entrySet()){
if(entry.getValue()!=null){
setQueryPart.append(entry.getKey()+“=”+entry.getValue()+“,”);
}
}
//删除最后一个逗号,因为我们不需要它。
setQueryPart.deleteCharAt(setQueryPart.lastIndexOf(“,”);
返回setQueryPart.toString();
}

然后,您只需传递一个先前填充的映射,并将返回字符串附加到查询字符串中。

尝试使用映射,其中键是列名,值是列值,如下所示:

public static String addSetValue(Map<String, Object> fieldMap) {
    StringBuilder  setQueryPart = new StringBuilder();
    for (Map.Entry<String, ? extends Object> entry: fieldMap.entrySet()) {
        if (entry.getValue() != null){
            setQueryPart.append(entry.getKey() + " = " +entry.getValue() + ", ");
        }
    }
    //Remove last comma, since we don't need it.
    setQueryPart.deleteCharAt(setQueryPart.lastIndexOf(","));
    return setQueryPart.toString();
}
公共静态字符串addSetValue(映射字段映射){
StringBuilder setQueryPart=新建StringBuilder();
对于(Map.Entry:fieldMap.entrySet()){
if(entry.getValue()!=null){
setQueryPart.append(entry.getKey()+“=”+entry.getValue()+“,”);
}
}
//删除最后一个逗号,因为我们不需要它。
setQueryPart.deleteCharAt(setQueryPart.lastIndexOf(“,”);
返回setQueryPart.toString();
}

然后,您只需传递一个先前填充的映射,并将返回字符串附加到查询字符串中。

首先,创建一个快速Bean来存储键和值

class Token{
    private String key, value;

    public Token(String key, String value) {
        this.key = key;
        this.value = value;
    }
}
然后使用
来:

  • 过滤空值
  • 连接键/值(这可以通过
    Token
  • 用逗号连接每个值
快速测试:

List<Token> list = new ArrayList<>();
list.add(new Token("A", "Foo"));
list.add(new Token("B", null));
list.add(new Token("C", "Bar"));

String query = 
    String.join(",", 
        list.stream()
           .filter(t -> t.value != null)
           .map(t -> t.key + "=" +t.value)
           .toArray(String[]::new)
    );
System.out.print(query);
A=?,C=


列表中有相应的参数。

首先,创建一个快速Bean来存储键和值

class Token{
    private String key, value;

    public Token(String key, String value) {
        this.key = key;
        this.value = value;
    }
}
然后使用
来:

  • 过滤空值
  • 连接键/值(这可以通过
    Token
  • 用逗号连接每个值
快速测试:

List<Token> list = new ArrayList<>();
list.add(new Token("A", "Foo"));
list.add(new Token("B", null));
list.add(new Token("C", "Bar"));

String query = 
    String.join(",", 
        list.stream()
           .filter(t -> t.value != null)
           .map(t -> t.key + "=" +t.value)
           .toArray(String[]::new)
    );
System.out.print(query);
A=?,C=


列表中有相应的参数。

效率在这里可能不那么重要,我会创建一个column=value的列表,并使用
String.join()
String.join
因为1.8。效率在这里可能不那么重要,我会创建一个column=value的列表并使用
String.join()
字符串。从1.8开始加入。