Имах подобен проблем. Мисля, че това е грешка в драйвера Oracle JDBC 7 (ojdbc7.jar). Грешката може да е в метода PreparedStatement.getParameterMetaData.
Този метод се използва вътрешно от Apache DBUtils. Така че няма да е грешка на DBUtils, а грешка от Oracle JDBC драйвер, разпространяван с Oracle 12c.
Същата заявка вероятно ще работи добре, ако използвате драйвера Oracle 11g ojdbc6.jar. Поне при мен проработи.
Ако искате да видите как заявката се обработва неправилно вътрешно от драйвера Oracle ojdbc7.jar, можете да използвате основния метод, включен в класа oracle.jdbc.driver.OracleParameterMetaDataParser. Опитайте това:
напр.
Резултатът е вашето SQL изречение, анализирано и преобразувано в SQL заявка, която се използва вътрешно от драйвера за идентифициране на типовете данни на параметрите:
Но както можете да видите в примера, FIRSTNAME е погрешно анализирано само като "F".
Използвайки една от заявките, които поставихте във въпроса си, резултатът е, че един от параметрите просто изчезва... така че анализаторът казва "5" параметъра, но вътрешната заявка, използвана за получаване на типовете данни, наистина има само "4" (ВЛАЖНОСТ има изчезна от SELECT).
изход:
Как да се поправи? Нямам идея, но както казах по-горе, използвайки драйвера Oracle 11g ojdbc6.jar, същата заявка работи (дори при свързване с база данни Oracle 12c...).
Поведението е доста случайно. Изглежда, че зависи от първата буква на колоната, използвана в АКТУАЛИЗАЦИЯТА. Ако започва с F и H винаги се проваля, но не знам дали има друго условие.