同様の問題がありました。 Oracle JDBC 7 Driver(ojdbc7.jar)のバグだと思います。バグはPreparedStatement.getParameterMetaDataメソッドにある可能性があります。
このメソッドは、ApacheDBUtilsによって内部的に使用されます。したがって、これはDBUtilsのバグではなく、Oracle12cで配布されているOracleJDBCドライバーのバグです。
Oracle 11g ojdbc6.jarドライバーを使用する場合、同じクエリがおそらく正常に機能します。少なくとも私にとってはうまくいきました。
クエリがOracleojdbc7.jarドライバによって内部的にどのように誤って処理されるかを確認したい場合は、oracle.jdbc.driver.OracleParameterMetaDataParserクラスに含まれているmainメソッドを使用できます。これを試してください:
例:
出力は、解析されてSQLクエリに変換されたSQLセンテンスであり、パラメータデータ型を識別するためにドライバによって内部的に使用されます。
ただし、サンプルでわかるように、FIRSTNAMEは「F」と同じように誤って解析されます。
質問に入力したクエリの1つを使用すると、パラメータの1つが消えてしまいます...したがって、パーサーは「5」パラメータを示しますが、データ型の取得に使用される内部クエリは実際には「4」しかありません(HUMIDITYはSELECTから削除されました。
出力:
それを修正する方法は?わかりませんが、前述したように、Oracle 11g ojdbc6.jarドライバーを使用すると、同じクエリが機能します(Oracle 12cデータベースに接続する場合でも...)。
動作はかなりランダムです。 UPDATEで使用されている列の最初の文字に依存しているようです。 Fで始まり、Hは常に失敗しますが、他に条件があるかどうかはわかりません。