我有一个如下表,
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
表格中的一些要点,
相同的
process_name
可以在不同的parent_ids
下找到。我已经知道
process_name
并且有一个包含parent_ids
的ArrayList
(其中存在)。
对于给定的 process_name
,我需要找到 startTime
和 endTime
中存在的所有 parent_ids
我的ArrayList。
我能想到的就是使用 for
循环并执行以下查询。
select startTime, endTime from myTable where parent_id = ? and process_name=?
我可以避免在循环中执行此查询并遵循其他更好的方法吗?
我目前使用 Derby
,但数据库可能会更改为 Oracle
。
最佳答案
有多种方法可以解决此问题:
正如 Svend 所建议的,由于您已经有了
process_name
,您可以获得该进程名称的所有开始和结束时间。另一种方法是先准备一串
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/