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

时间:2013-11-15 21:54:06

标签: 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());
    }
}

2 个答案:

答案 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以获取更多详细信息。