sql >> Databasteknik >  >> RDS >> Oracle

Apache Dbutils ändrar kolumnnamnet i uppdateringen Sql

Jag hade ett liknande problem. Jag tror att det är en bugg i Oracle JDBC 7-drivrutinen (ojdbc7.jar). Felet kan vara i metoden PreparedStatement.getParameterMetaData.

Denna metod används internt av Apache DBUtils. Så det skulle inte vara en bugg av DBUtils, utan en bugg från Oracle JDBC-drivrutinen distribuerad med Oracle 12c.

Samma fråga kommer förmodligen att fungera bra om du använder Oracle 11g ojdbc6.jar-drivrutinen. Det fungerade åtminstone för mig.

Om du vill se hur frågan behandlas felaktigt internt av Oracle ojdbc7.jar-drivrutinen, kan du använda huvudmetoden som ingår i klassen oracle.jdbc.driver.OracleParameterMetaDataParser. Prova detta:

t.ex.

Utdata är din SQL-sats som tolkas och konverteras till en SQL-fråga som används internt av drivrutinen för att identifiera parameterdatatyperna:

Men som du kan se i exemplet är FIRSTNAME felaktigt tolkat precis som "F".

Om du använder en av frågorna du lägger i din fråga blir resultatet att en av parametrarna bara försvinner... så parsern säger "5" params men den interna frågan som används för att få datatyperna har verkligen bara "4" (HUMIDITY har borta från SELECT).

utdata:

Hur fixar man det? Ingen aning, men som jag sa ovan, med hjälp av Oracle 11g ojdbc6.jar-drivrutinen, fungerar samma fråga (även att ansluta till en Oracle 12c-databas...).

Beteendet är ganska slumpmässigt. Det verkar som om det beror på den första bokstaven i kolumnen som används i UPPDATERING. Om det börjar med F och H misslyckas alltid, men jag vet inte om det finns något annat tillstånd.



  1. Anslut SQL Server till SugarCRM

  2. Lägg till IF ELSE-satsen

  3. MySQL Query - Registrerar mellan idag och senaste 30 dagarna

  4. Laddar 5 miljoner rader i Pandas från MySQL