繁体   English   中英

如何在Java中将记录列表与数据库进行比较?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM