Как проверить тип поля SQL в Java перед вставкой данных - PullRequest
0 голосов
/ 14 января 2019

Я ищу некоторые инструкции о том, как (или если есть способ) проверить тип поля БД при выполнении оператора INSERT, чтобы обойти исключение "Неправильное целочисленное значение".

Проблема, с которой я сталкиваюсь, заключается в том, что моя программа читает из источника данных CSV и может содержать поля, которые являются пустыми и предназначены для целочисленного поля. Когда я пытаюсь вставить эту пустую строку в поле INT, возникает это исключение.

В фрагменте кода (у меня есть всего около 50 полей для обновления, но для упрощения я сократил код) я создал функцию CheckField для итерации по всем полям, но у нее есть явные жесткие ограничения, если «N / A» и т. Д. Я предпочитаю использовать цикл для setString из-за количества обновляемых полей по сравнению с 50 операторами setString.

Я посмотрел ResultSetMetaData, и он содержит то, что я ищу с "getColumnTypeName", но я считаю, что это применимо только к операторам SELECT, а не к UPDATE (может быть?).

int field[] = {3, 4, 0};

String updateTable = "UPDATE test_table F1 = ?, F2 = ? WHERE F0 = ?"

PreparedStatement update = conMaria.prepareStatement(updateTable);

Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
for (CSVRecord record : records) {
    for (int i = 0; i < field.length; i++)
        update.setString(i + 1, CheckField(record.get(field[i])));
    update.executeUpdate();

public static String CheckField(String recordValue) {
    return recordValue.equals("") ? null : recordValue;
}

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 января 2019
  1. создать таблицу с 50 столбцами varchar,
  2. LOAD DATA для заполнения,
  3. запустить несколько команд SQL, чтобы проверить столбцы, исправить неверные значения, удалить строки, которые невозможно исправить, и т. Д. И т. Д.
  4. Наконец, скопируйте очищенные данные в «реальную» таблицу.

Java-код не используется. Вы получаете кучу практики SQL.

Например:

INSERT INTO `real` (...)
    SELECT ..., IF(foo = '', 0, foo), ...
        FROM `staging`;
0 голосов
/ 14 января 2019

Почему вы не используете Hibernate и класс Entity для своей таблицы? С помощью Spring Boot вы можете легко вставлять и обновлять данные, используя хранилища данных. Поскольку типы элементов в вашем классе Entity будут соответствовать типам столбцов таблицы, нет необходимости запрашивать типы из самой БД. Кроме того, использование этих классов сущностей позволит вам указать значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...