Ho avuto un problema simile. Penso che sia un bug nel driver Oracle JDBC 7 (ojdbc7.jar). Il bug potrebbe essere nel metodo PreparedStatement.getParameterMetaData.
Questo metodo viene utilizzato internamente da Apache DBUtils. Quindi non sarebbe un bug di DBUtils, ma un bug del driver Oracle JDBC distribuito con Oracle 12c.
La stessa query probabilmente funzionerà correttamente se si utilizza il driver Oracle 11g ojdbc6.jar. Almeno ha funzionato per me.
Se vuoi vedere come la query viene elaborata internamente in modo errato dal driver Oracle ojdbc7.jar, puoi utilizzare il metodo principale incluso nella classe oracle.jdbc.driver.OracleParameterMetaDataParser. Prova questo:
es.
L'output è la tua frase SQL analizzata e convertita in una query SQL utilizzata internamente dal driver per identificare i tipi di dati dei parametri:
Ma come puoi vedere nell'esempio, il FIRSTNAME viene erroneamente analizzato come "F".
Usando una delle query che hai inserito nella tua domanda, il risultato è che uno dei parametri scompare ... quindi il parser dice "5" parametri ma la query interna utilizzata per ottenere i tipi di dati ha effettivamente solo "4" (HUMIDITY ha andato da SELECT).
uscita:
Come sistemarlo? Non ne ho idea, ma come ho detto sopra, utilizzando il driver Oracle 11g ojdbc6.jar, la stessa query funziona (anche connettendosi con un database Oracle 12c...).
Il comportamento è piuttosto casuale. Sembra che dipenda dalla prima lettera della colonna utilizzata nell'AGGIORNAMENTO. Se inizia con F e H fallisce sempre, ma non so se c'è qualche altra condizione.