Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring & java.sql.SQLDataException / 13 сообщений из 13, страница 1 из 1
28.03.2013, 08:54:50
    #38201601
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring & java.sql.SQLDataException
Добрый день.
Есть сервер Derby, куда мы пытаемся записать данные с помощью JdbcTemplate. При попытке добавления записи со значением null в поле DATE возникает java.sql.SQLDataException: Предпринята попытке получить значение данных типа '<UNKNOWN>' из значения данных типа 'DATE'. Разве Spring не должен сам разруливать такие ситуации? Собственно ради этого всё и затевалось, что бы самим не городить кучу разных проверок исходных данных. Что посоветуете, аксакалы?
...
Рейтинг: 0 / 0
28.03.2013, 11:14:46
    #38201859
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring & java.sql.SQLDataException
JDBC драйвер должен разруливать, а не Spring. stacktrace давайте что ли посмотрим. Нужно найти на каком уровне вклинится и явно искпользовать setNull().
...
Рейтинг: 0 / 0
28.03.2013, 12:30:57
    #38202038
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring & java.sql.SQLDataException
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
28.03.2013, 12:42:10
    #38202076
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring & java.sql.SQLDataException
Я смотрю исходники, он так и делает.
Рекомендую подебажить, чтобы понять что пошло не так.
StatementCreatorUtils.setNull(...) имеет любопытный код.
Там он даже проверяет к какой именно базе он приконектился.
Стоит подебажить просто из любопытства.

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

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

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

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

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


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