[英]How to compare list of records against database in Java?
如何比较记录列表与数据库? 我的列表中有1000多个记录,需要针对数据库进行验证。 如何验证从列表到数据库的每条记录? 从数据库中选择所有数据并存储在列表中,然后必须比较这些值? 请指教...
以下代码列出了针对数据库进行验证的值。
private void validatepart(HttpServletRequest req, Vector<String> errors) {
Parts Bean = (Parts)req.getAttribute("partslist");
Vector<PartInfo> List = Bean.getPartList();
int sz = partList.size();
for (int i = 0; i < sz; i++) {
PartInfo part = (PartInfo)partList.elementAt(i);
System.out.println(part.getNumber());
System.out.println(part.getName());
}
}
这取决于您的比较意思。 如果仅仅是一个字段,则执行查询,例如select * from parts_table where part_number = ?
。 向该查询添加更多字段并不是一件容易的事。 如果未返回任何内容,则说明它不存在。
如果您需要比较并确切知道哪些值不同,则可以尝试这样的操作
List<String> compareObjects(PartInfo filePart, PartInfo dbPart) {
List<String> different = new LinkedList<String>();
if (!filePart.getNumber().equals(dbPart.getNumber())) {
different.add("number");
}
//repeat for all your fields
return different;
}
如果您需要针对数据库进行验证的对象列表包含主键,那么您可以仅构建这些主键值的列表并运行如下查询:
SELECT <PRIMARY KEY FIELD> FROM <TABLE> WHERE <PRIMARY_KEY_FIELD> IN <LIST OF PRIMARY KEYS> SORT BY <PRIMARY KEY FIELD> ASC;
一旦获得该列表,就可以比较结果。 我的直觉是将您的数据(以及查询结果也)放入Set对象中,然后调用removesAll()以获取不在数据库中的项目(对数据库中但不在您的集合中的项目进行相反的处理):
yourDataSet.removeAll(queryResults);
假定您在PartInfo
对象中实现了equals()
方法。 您可以查看Java API 文档以获取更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.