gpt4 book ai didi

java - StringJoiner - 括号中的每一项

转载 作者:行者123 更新时间:2023-12-05 08:30:03 25 4
gpt4 key购买 nike

为了在 Java 应用程序中适应 SQL 模板,我需要按如下方式格式化元素:

RIGHT JOIN (values (123), (456), (789)..

特别是,给定一个 Java 整数列表:

List<int> ints = Arrays.asList(123, 456, 789)

如何正确使用StringJoiner (examples)输出如下字符串?

(123), (456), (789)

我能找到的最接近的例子是

StringJoiner mystring = new StringJoiner(",", "(", ")");    

哪个返回

(123, 456, 789)

更多背景/上下文

MadProgrammer 指出我可能会通过 PreparedStatement 以不同的方式处理这个问题。这是我要填写的实际查询...

例如,这里是原生 SQL 中的查询片段:

SELECT loadlist.id as load_id, payload
FROM payload_log
RIGHT JOIN (values (123), (456), (789)) as loadlist(id)
ON payload_log.entity_id = loadlist.id;

下面是它是如何从应用程序中调用的。理想情况下,我们可以使用 :ids 参数进行绑定(bind),但不确定如何使用 joiner 来执行 String.format。

String queryString = String.format("SELECT loadlist.id as load_id, payload\n"+
"FROM payload_log" +
" RIGHT JOIN (values (:ids)) as loadlist(id)" +
" ON payload_log.entity_id = loadlist.id)";
return entityManager.createNativeQuery(queryString).setParameter("ids", loadIds);

现在我应该能够在应用格式后使用 query.setParameter 传递 :ids 参数,如下面的答案?那么 PreparedStatement 适合什么地方呢?

最佳答案

使用现有代码,最简单的方法是将括号添加到分隔符中:

StringJoiner mystring = new StringJoiner("), (", "(", ")");
// add...
// (123), (456), (789)

或者只使用 collector :

String s = Arrays.asList(123, 456, 789)
.stream()
.map(Object::toString)
.collect(Collectors.joining("), (", "(", ")"));
// (123), (456), (789)

最好使用准备好的语句,而不是使用字符串操作来构建查询。

关于java - StringJoiner - 括号中的每一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66717034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com