Правильный способ обработки нулевого значения для типа данных Oracle Date в подготовленном выражении - PullRequest
0 голосов
/ 12 мая 2019

У меня есть база данных с более чем 20 столбцами, и некоторые из них являются date / timestamp типами данных с нулевыми значениями.

Приложение Java будет считывать данные из этой таблицы и вставлять в другую таблицу. Подготовленный оператор используется для фрейма запроса вставки. При вставке записи я получаю «исключение нулевого указателя» в столбцах даты, где бы она ни была нулевой. Для Varchar автоматически устанавливается значение NULL, когда фактическое значение равно NULL. Есть ли способ автоматически обрабатывать поля Date с нулевыми значениями, например varchar в подготовленных выражениях?

PreparedStatement ps = null;
....
....
ps.setDate(3, new java.sql.Date(date.getTime())); //date is Java.Util.Date

Ошибка при получении. Поэтому я работаю вручную, как показано ниже

if(date!= null)
    ps.setDate(3, new java.sql.Date(date.getTime()));
else
    ps.setNull(3, Types.DATE);

1 Ответ

1 голос
/ 12 мая 2019

Проблема, конечно, в том, что вы пытаетесь вызвать getTime на date, который может быть null.

Приложение Java будет читать данные из этой таблицыи вставьте в другую таблицу.

Если это правда, то я бы ожидал, что date до уже будет java.sql.Date (или null), и вы можете простоиспользуйте его напрямую:

ps.setDate(3, date);

Если date действительно не java.sql.Date, то вы можете использовать условный оператор:

ps.setDate(3, date == null ? null : new java.sql.Date(date.getTime()));

Можно передать null вsetDate (по той же причине он работает в setString).Вам нужно только setNull, когда тип Java, который вы используете со столбцом, является примитивным типом (например, int).Поскольку вы не можете позвонить setInt с null, где должен быть int, вы должны использовать setNull в этой ситуации.Это не проблема для setDate, однако.

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