如何比较数据库的记录列表?我在列表中有超过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());
}
}
答案 0 :(得分:1)
这取决于比较你的意思。如果它只是一个字段,则执行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;
}
答案 1 :(得分:0)
如果您需要针对数据库验证的对象列表包含主键,那么您可以构建这些主键值的列表并运行如下查询:
SELECT <PRIMARY KEY FIELD> FROM <TABLE> WHERE <PRIMARY_KEY_FIELD> IN <LIST OF PRIMARY KEYS> SORT BY <PRIMARY KEY FIELD> ASC;
重新获得该列表后,您可以比较结果。我的直觉是将您的数据(以及查询结果)放入Set对象,然后调用removedAll()以获取不在数据库中的项目(对于数据库中的项而不是您的集合中的项目反向):
yourDataSet.removeAll(queryResults);
这假设您在equals()
对象中实施了PartInfo
方法。您可以查看Java API documentation以获取更多详细信息。