Eu tive uma questão semelhante. Acho que é um bug no driver Oracle JDBC 7 (ojdbc7.jar). O bug pode estar no método PreparedStatement.getParameterMetaData.
Este método é usado internamente pelo Apache DBUtils. Então não seria um bug do DBUtils, mas um bug do driver Oracle JDBC distribuído com o Oracle 12c.
A mesma consulta provavelmente funcionará bem se você usar o driver Oracle 11g ojdbc6.jar. Pelo menos funcionou para mim.
Se você quiser ver como a Consulta é processada incorretamente internamente pelo driver Oracle ojdbc7.jar, você pode usar o método main incluído na classe oracle.jdbc.driver.OracleParameterMetaDataParser. Tente isto:
por exemplo.
A saída é sua Sentença SQL analisada e convertida em uma Consulta SQL que é usada internamente pelo driver para identificar os tipos de dados do parâmetro:
Mas, como você pode ver no exemplo, o FIRSTNAME é analisado erroneamente como "F".
Usando uma das consultas que você colocou em sua pergunta, o resultado é que um dos parâmetros simplesmente desaparece ... saiu do SELECT).
resultado:
Como corrigi-lo? Não faço ideia, mas como eu disse acima, usando o driver Oracle 11g ojdbc6.jar, a mesma consulta funciona (mesmo conectando com um banco de dados Oracle 12c...).
O comportamento é bem aleatório. Parece que depende da primeira letra da coluna usada no UPDATE. Se começa com F e H sempre falha, mas não sei se existe alguma outra condição.