Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Apache Dbutils alterando o nome da coluna na atualização Sql


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.