我有一张桌子,
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
并在其中存在ArrayList
的{{1}}。
对于给定的parent_ids
,我需要找到process_name
中存在的所有startTime
的{{1}}和endTime
。
我能想到的就是使用parent_ids
循环并执行以下查询。
ArrayList
我可以避免循环执行此查询并采用其他更好的方法吗?
此刻我使用for
,但是数据库可能会更改为select startTime, endTime from myTable where parent_id = ? and process_name=?
。
答案 0 :(得分:2)
有多种方法可以解决此问题:
根据建议,由于您已经拥有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=?";
答案 1 :(得分:0)
在循环中执行查询不是一个好习惯。相反,为什么不立即获取属于给定进程的所有记录。也许将GROUPBY子句用于process_name以及其他列上的聚合函数[如果您需要在其他列上执行任何操作并避免自己通过代码执行操作] 掌握了所有记录后,即可将startTime和endTime用于进一步处理。
希望有帮助。
答案 2 :(得分:0)
不可能只是做:
select parent_id, startTime, endTime from myTable where process_name=?
并获取所有parent_id
值的值,然后再过滤ArrayList
上的值?
答案 3 :(得分:0)
作为@ prakhar-londhe解决方案的细微变化,您也可以像在{p1
in
,然后为每个String query = " select startTime, endTime from myTable where parent_id IN (?, ?, ?) and process_name = ?";
添加一个参数。当然,您仍然必须组装parent_id
(将query
括在括号内的?
)和参数列表中。