我正在开发一个java应用程序,它连接到数据库来获取一些记录,处理每个记录,并将记录更新回数据库表。
下面是我的db模式(包含示例数据):
Table A: Requests
| REQUESTID | STATUS |
-------------------------
| 1 | PENDING|
| 2 | PENDING|
Table B: RequestDetails
| DETAILID | REQUESTID | STATUS | USERID |
---------------------------------------------
| 1 | 1 | PENDING | RA1234 |
| 2 | 1 | PENDING | YA7266 |
| 3 | 2 | PENDING | KAJ373 |以下是我的要求:
1)从两个表中获取请求和挂起状态,以及请求数据,我使用下面的查询:
SELECT Requests.REQUEST_ID as "RequestID",RequestDetails.USERID as "UserID",RequestDetails.DETAILID as "DetailID"
FROM Requests Requests
JOIN RequestDetails RequestDetails
ON (Requests.REQUESTID=RequestDetails.REQUESTID AND Requests.REQUEST_STATUS='PENDING' AND RequestDetails.STATUS='PENDING')2)我使用HashMap<String, List<HashMap<String,String>>来存储所有值
3)遍历每个请求并获取详细信息List<HashMap<String,String>>对每个详细记录执行操作并更新状态
4)处理完请求的所有明细记录后,更新请求表中请求的状态
结束状态应该是这样的:
Table A: Requests
| REQUESTID | STATUS |
-------------------------
| 1 | PENDING|
| 2 | PENDING|
Table B: RequestDetails
| DETAILID | REQUESTID | STATUS | USERID |
---------------------------------------------
| 1 | 1 | PENDING | RA1234 |
| 2 | 1 | PENDING | YA7266 |
| 3 | 2 | PENDING | KAJ373 |我的问题是:我使用的集合非常复杂("HashMap<String, List<HashMap<String,String>>")。有没有其他有效的方法来做到这一点?
谢谢,
窗扇
发布于 2017-07-31 14:55:31
我认为你应该像这样使用class,
Class RequestDetails{
int detailId;
int statusId;
String status;
String userId;
}你应该使用HashMap<String, RequestDetails>而不是map,因为它具有代码简单性等优点,而且当你处理大量数据和需要修改字符串时,最好避免使用字符串数据类型,因为它是不可变的,会降低你的性能。
希望这能有所帮助。
发布于 2017-07-31 14:59:53
最重要的是,正如Darshan所建议的,你也必须重写hashCode和equals方法,原因是它是处理HashMap时的基本契约,它也会提高性能。
https://stackoverflow.com/questions/45408484
复制相似问题