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