Вставка различных значений из XML в таблицу базы данных - PullRequest
1 голос
/ 27 апреля 2020

У меня XML выглядит следующим образом:

    <employee>
        <code>13</code>
        <label>Admin</label>
    </employee>
    <employee>
        <code>13</code>
        <label>Admin</label>
    </employee>
    <employee>
        <code>09</code>
        <label>Logistics</label>
    </employee>

В моей базе данных Oracle у меня есть 2 столбца, а именно CODE1, CODE2. Данные должны быть вставлены как CODE1 = 13 и CODE2 = 09.

Но в настоящее время происходит то, что CODE1 = 13 и CODE2 = 13. И 09 не вставляется в базу данных.

Он просто хранит первые 2 значения, игнорируя остальные. Мое требование состоит в том, чтобы повторяющиеся значения были вставлены только один раз в БД .

Ожидаемый результат: CODE1 = 13, CODE2 = 09

Следующий мой java код:

    for (int i = 0; i < 2; i++) {
            final int count = i + 1;
            String code = null;
            final Emploi[] employee = tabLieuTrav.getEmployee();
                code = employee[i].getCode();
                if (code != null) {
                mapParam.addParamValue(CODE + count,
                        code);
            } else {
                mapParam.addParamValue(CODE + count, null,
                        Types.VARCHAR);
            }

getCode () возвращает значение (например, 13) из тега .

Заранее спасибо.

1 Ответ

1 голос
/ 27 апреля 2020

попробуйте следующие решения,

сначала вы должны создать класс Employee, включающий методы hasCode() и equals() следующим образом,

public class Employee {

    private int code; 
    private String lable;

    public Employee(int code, String lable) {
        super();
        this.code = code;
        this.lable = lable;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getLable() {
        return lable;
    }
    public void setLable(String lable) {
        this.lable = lable;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + code;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Employee other = (Employee) obj;
        if (code != other.code)
            return false;
        return true;
    }
}

выше hasCode() и equals() методы генерируются Eclipse Ide. Вы можете создать эти методы вручную следующим образом:

@Override
public boolean equals(Object obj) {
    if (obj instanceof Employee) {
        return Objects.equals(code, ((Employee) obj).code);
    }
    return false;
}

@Override
public int hashCode() {
    return this.code;
}

равно Метод : указывает, является ли какой-либо другой объект "равным" этому. для получения дополнительной информации

hashCode Method : Возвращает значение кода ha sh для объекта. Этот метод поддерживается в пользу таблиц ha sh, таких как таблицы, предоставляемые HashMap. для получения дополнительной информации

затем добавьте массив employee в ArrayList. потому что нижеприведенные методы описывают, как получить различные значения из ArrayList.

Emploi[] employee = tabLieuTrav.getEmployee();
List<Employee> empList = new ArrayList(Arrays.asList(employee));

, тогда вы можете использовать один из следующих методов для удаления повторяющихся значений из метода ArrayList (empList)

во-первых, удалите дубликаты из ArrayList с помощью Set (коллекция, не содержащая дублирующихся элементов) для получения дополнительной информации

HashSet<Employee> uniqueEmployee = new HashSet(empList);

метод два, удалите дубликаты из ArrayList с помощью java 8 потоковый метод (вернуть отдельный элемент из коллекции) для получения дополнительной информации

List<Employee> uniqueEmployee = empList..stream().distinct().collect(Collectors.toList();

наконец, вы можете использовать uniqueEmployee коллекцию следующим образом,

for (Employee employee : uniqueEmployee) {
    code = employee.getCode();
    if (code != null) {
        mapParam.addParamValue(CODE + count, code);
    } else {
        mapParam.addParamValue(CODE + count, null, Types.VARCHAR);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...