gpt4 book ai didi

java - 从数据库中的多个表中检索数据

转载 作者:行者123 更新时间:2023-12-02 12:13:20 25 4
gpt4 key购买 nike

我的数据库中有一些表。他们有一些特定的模式。例如,假设我有表员工,然后是具有相同模式的其他表,例如:

table 1:employee
table 2:employee_X
table 3:employee_Y

我想检查这些表是否包含数据,如果包含,那么我必须为每个表调用一些方法。我正在使用以下代码来检索。

DatabaseMetaData meta = con.getMetaData();
ResultSet res = meta.getTables(null, null, "My_Table_Name", new String[] {"TABLE"});
while (res.next()) {

if(rs.getStrin(3).equals(employee)){
//my code to write data of this table to a file
}

if(rs.getString(3).equals(employee_X)){
//my code to write data to the same file

}

if(rs.getString(3).equals(employee_Y)){
//code to write data to the same file from this table
}
}

代码工作正常,但我如何一次从所有这些表中检索数据而不是使用三个检查。如果这些表中的任何一个包含数据,我想将其写入我的文件。如何以更少的代码行高效地执行此操作?

如果有人可以建议如何在单个语句中检查每个表是否包含数据,然后我可以调用我的代码将数据写入文件,那就太好了。

最佳答案

您可以在复杂查询中使用UNION 语句。请检查示例:

SELECT id, name FROM employee WHERE id = ?
UNION
SELECT id, name FROM employee_x WHERE id = ?
UNION
...

您还可以使用UNION ALL 语句代替UNION。主要区别是 UNION 返回不重复的唯一结果集,UNION ALL 允许重复。请检查此链接 https://www.w3schools.com/sql/sql_union.asp有关 union 语句的详细说明。

如果您需要使用自定义过滤表创建UNION查询,请检查示例:

Set<String> requiredTables = new HashSet<>();
// fill set with required tables for result query
requiredTables.add("employee");
ResultSet res = meta.getTables(null, null, "My_Table_Name",
new String[] {"TABLE"});

List<String> existentTables = new LinkedList<>();
while(res.next()) {
if (requiredTables.contains(res.getString(3)) {
existentTables.add(res.getString(3));
}
}

String query = existentTables.stream().map(table -> String.format("SELECT * FROM %s", table)).collect(Collectors.joinning(" UNION "));

关于java - 从数据库中的多个表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46372362/

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