gpt4 book ai didi

java - MySQL:如何通过 JDBC 使用一组值来约束值对?

转载 作者:行者123 更新时间:2023-11-29 11:35:46 26 4
gpt4 key购买 nike

问题

使用 MySQL 和使用 JDBC 模板,有没有一种方法可以从 Java 列表构建参数,以便 SQL 请求将几个值与给定集合中的几个值相匹配

<小时/>

详细信息

仅当列表中存在这对值时,这些值才应匹配。

如果一个出现在几个值中,而另一个出现在进一步对列表中的另一对值中,则它应该匹配。

也就是说,考虑到 JDBC 参数化查询:

SELECT *
FROM TABLE_1
WHERE (COL_1, COL_2) IN (:valuesSet)

注意:valuesSet是一组

Java 代码:

public void daoMethod(List<MyObject> values1, List<MyObject> values2) {
String query = "";
query = "SELECT *\n" +
"FROM TABLE_1\n" +
"WHERE (COL_1, COL_2) IN (:valuesSet)";

MapSqlParameterSource parameters = new MapSqlParameterSource();

// Build valuesSet here

parameters.addValue("valuesSet", valuesSet);
namedParameterJdbcTemplate.query(query, parameters);
}

是否有一种优雅的方式来构建 JDBC 模板,而无需“手动”创建字符串?

插入的:valuesSet应该是这样的:

"(values1.get(0), values2.get(0)), (values1.get(1), values2.get(1)), ..."

但是我应该如何构建该字符串?

<小时/>

当前轨道

目前,我的第一个草案解决方案是通过 Java 代码构建字符串,如下所示:

List<String> valuesSet = new ArrayList<String>();

for (int i = 0; i < values1.size(); i++) {
String value1 = StringEscapeUtils.escapeSql(values1.get(i).toString());
String value2 = StringEscapeUtils.escapeSql(values2.get(i).toString());

valuesSet.add("('" + value1 + "','" + value2 + "')");
}

但它不断转义结果列表以使其成为字符串并添加 '周围。因此,它不起作用。

<小时/>

TL;DR

输入:

List<Object> objects

输出:

SELECT *
FROM TABLE_1
WHERE (COL_1, COL_2) IN (
('object_1_val1', 'object_1_val2'),
('object_2_val1', 'object_2_val2'),
('object_3_val1', 'object_3_val2'),
('object_4_val1', 'object_4_val2'),
...
)

平均值:

NamedParameterJdbcTemplate

最佳答案

单独使用每个值。

List<String> valuesSet = new ArrayList<>();
StringBuilder sqlIn = new SqlBuilder();
for (int i = 0; i < values1.size(); i++) {
sqlIn.append("(?, ?),");
valuesSet.add(values1.get(i).toString());
valuesSet.add(values2.get(i).toString());
}

关于java - MySQL:如何通过 JDBC 使用一组值来约束值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36624215/

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