Я использую spring-2.5.6 для подключения автономного приложения к базе данных Oracle 10g (ojdbc14.jar) с помощью org.apache.commons.dbcp.BasicDataSource. Когда я пытаюсь получить SqlRowSet с помощью метода public SqlRowSet queryForRowSet(String sql, Object[] args) throws DataAccessException
, я получаю java.sql.SQLException: Invalid size size. Не может быть меньше нуля ».
sql, вызывающий таблицу:
select CUSTAREADESC, BEGCOL, COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
Столбцы BEGCOL и COLLENGTH имеют номер типа данных без определенной точности.
Я нашел некоторую информацию по этой проблеме, похоже, что она несовместима с драйверами Oracle и реализацией com.sun.rowset.CachedRowSetImpl от Sun.
Соединение с базой данных Java (JDBC) - заполнение CachedRowSet приводит к SQLException: неверный размер шкалы
Использование queryForRowSet с факторингом подзапроса SQL дает ошибки
Они предлагают изменить sql на следующее как обходной путь.
select CUSTAREADESC, (BEGCOL + 0) BEGCOL, (COLLENGTH + 0) COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
Кто-нибудь знает лучшее универсальное решение, которое не использует настраиваемый sql для любой существующей таблицы, где столбец не имеет определенной точности?