java - 避免在循环中执行数据库查询

标签 java sql

我有一个如下表,

process_name |  startTime             | endTime               | parent_id
-------------------------------------------------------------------------
chrome       |  2019-03-06 00:48:27   | 2019-03-06 00:48:58   | 111
chrome       |  2019-03-07 00:48:27   | 2019-03-07 00:48:58   | 112
firefox      |  2019-03-08 00:48:27   | 2019-03-08 00:48:58   | 113
IE           |  2019-03-09 00:48:27   | 2019-03-09 00:48:58   | 114
firefox      |  2019-03-10 00:48:27   | 2019-03-10 00:48:58   | 115
chrome       |  2019-03-11 00:48:27   | 2019-03-11 00:48:58   | 116

表格中的一些要点,

  1. 相同的process_name可以在不同的parent_ids下找到。

  2. 我已经知道 process_name 并且有一个包含 parent_idsArrayList(其中存在)。

对于给定的 process_name,我需要找到 startTimeendTime 中存在的所有 parent_ids我的ArrayList。

我能想到的就是使用 for 循环并执行以下查询。

select startTime, endTime from myTable where parent_id = ? and process_name=?

我可以避免在循环中执行此查询并遵循其他更好的方法吗?

我目前使用 Derby,但数据库可能会更改为 Oracle

最佳答案

有多种方法可以解决此问题:

  1. 正如 Svend 所建议的,由于您已经有了 process_name,您可以获得该进程名称的所有开始和结束时间。

  2. 另一种方法是先准备一串 parent_id,然后使用单个查询将其查询到数据库:

代码:

String s = "(";
for(int i = 0; i < list.length; i++)
{
    if(i<list.length-1) s+=list[i] + ",";
    else s+= ""+ list[i] + ")";
}

String query = " select startTime, endTime from myTable where parent_id IN " + s + " and process_name=?";

关于java - 避免在循环中执行数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55275876/

相关文章:

mysql - 使用mysql Prepared Statement执行多个分号分隔的查询

sql - 在JavaDB Apache Derby中,我不知道是什么导致错误: Syntax error: Encountered “)” at line 30, column 1. SQLState: 42X01

java - 为什么 INSERT 查询在此 HttpServer 代码中不起作用

java - 如何在静态导入上使用方法引用?

java - 如何在 android 中同时更改 map 上所有标记的颜色?如何只更改部分标记的颜色?

sql - 如何根据其他列的值更新列

sql - 将sql查询的输出分配给unix中的变量

java - 更新子文档的所有元素,其中子文档是列表的一部分

Java:带循环的数组

sql - Joomla 表单字段类型 sql ="....WHERE condition"?