powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring & java.sql.SQLDataException
13 сообщений из 13, страница 1 из 1
Spring & java.sql.SQLDataException
    #38201601
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Есть сервер Derby, куда мы пытаемся записать данные с помощью JdbcTemplate. При попытке добавления записи со значением null в поле DATE возникает java.sql.SQLDataException: Предпринята попытке получить значение данных типа '<UNKNOWN>' из значения данных типа 'DATE'. Разве Spring не должен сам разруливать такие ситуации? Собственно ради этого всё и затевалось, что бы самим не городить кучу разных проверок исходных данных. Что посоветуете, аксакалы?
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38201859
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDBC драйвер должен разруливать, а не Spring. stacktrace давайте что ли посмотрим. Нужно найти на каком уровне вклинится и явно искпользовать setNull().
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38202038
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Допустим было (просто JDBC)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
CallableStatement cs = connection.prepareCall("INSERT INTO ... (CONTRACT_DATE, CONTRACT_NUMBER) VALUES (?,?)");
Date d = contract.getDate();
if(d == null)
   cs.setNull(1, Types.NULL);
else
   cs.setDate(1, d);
cs.setString(2, contract.getNumber());
cs.executeUpdate();



Всё работает хорошо. Переходим на Spring JdbcTemplate
Код: java
1.
jdbcTemplate.update("INSERT INTO ... (CONTRACT_DATE, CONTRACT_NUMBER) VALUES (?,?)", new Object[] {contract.getDate(), contract.getNumber()}); 


Вызывает вышеописанный эксепшэн, т.к. contract.getDate() возвращает null (это допустимо). Как в данном случае правильно использовать JdbcTemplate? Разве Spring при инекции объектов не должен был сам поступить так же, как описано в первом примере?
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38202076
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я смотрю исходники, он так и делает.
Рекомендую подебажить, чтобы понять что пошло не так.
StatementCreatorUtils.setNull(...) имеет любопытный код.
Там он даже проверяет к какой именно базе он приконектился.
Стоит подебажить просто из любопытства.

Ну, и PreparedStatementSetter для таких случаев никто не отменял.
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38202735
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Так, эксперимента ради, подключил 3-й Spring (было 2.5) - с ним работает без ошибок.
Есть о чём задуматься...
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38202804
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тю, так сразу надо было говорить.
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38203623
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

А с 2.5 это никак не победить?
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38203780
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickА с 2.5 это никак не победить?

PreparedStatementSetter свой подсунсть.
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38203993
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Но если всё придётся описывать самостоятельно руками, зачем тогда вообще нужен этот JdbcTemplate? Не проще использовать голый JDBC? Или всё же какие-то преимущества будут? На данный момент в этом приложении ничего от Spring кроме JdbcTemplate не используется.
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38203997
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickНо если всё придётся описывать самостоятельно руками, зачем тогда вообще нужен этот JdbcTemplate? Не проще использовать голый JDBC? Или всё же какие-то преимущества будут? На данный момент в этом приложении ничего от Spring кроме JdbcTemplate не используется.
Это просто праздник какой-то. Т.е. Spring используется только как JdbcTemplate, больше ничего от него независит, но апргрейд до, уже много лет как актульаной, версии 3.x принципиально не возможен?
Ну, пропатч свой Spring, тогда. Смержи фискы JdbcTemplate. Там принципиальных различий не должно быть.
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38204000
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно PreparedStatementSetter отнаследовать от дефолтного спрингового и переопределить setNull, чтобы нормально работал.
Под рукой 2.5 нет, поэтому точных инструкций дать не могу.
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38204498
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЭто просто праздник какой-то. Т.е. Spring используется только как JdbcTemplate, больше ничего от него независит, но апргрейд до, уже много лет как актульаной, версии 3.x принципиально не возможен?
+100
JdbcTemplate - это просто милая добавка, заваривать кашу ради него и при этом не быть в состоянии взять самую новую версию...
...
Рейтинг: 0 / 0
Spring & java.sql.SQLDataException
    #38204529
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ещё Apache Commons DBUtils с похожей функциональностью.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring & java.sql.SQLDataException
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]