Saya memiliki masalah serupa. Saya pikir itu adalah bug di Oracle JDBC 7 Driver (ojdbc7.jar). Bug tersebut bisa jadi dalam metode PreparedStatement.getParameterMetaData.
Metode ini digunakan secara internal oleh Apache DBUtils. Jadi itu bukan bug dari DBUtils, tetapi bug dari driver Oracle JDBC yang didistribusikan dengan Oracle 12c.
Kueri yang sama mungkin akan berfungsi dengan baik jika Anda menggunakan driver Oracle 11g ojdbc6.jar. Setidaknya berhasil untuk saya.
Jika Anda ingin melihat bagaimana Query salah diproses secara internal oleh driver Oracle ojdbc7.jar, Anda dapat menggunakan metode utama yang disertakan dalam kelas oracle.jdbc.driver.OracleParameterMetaDataParser. Coba ini:
misalnya
Outputnya adalah Kalimat SQL Anda yang diurai dan dikonversi menjadi SQL Query yang digunakan secara internal oleh driver untuk mengidentifikasi tipe data parameter:
Tapi seperti yang Anda lihat dalam contoh, FIRSTNAME salah diurai seperti "F".
Menggunakan salah satu Kueri yang Anda masukkan ke dalam pertanyaan Anda, hasilnya adalah salah satu parameter hilang begitu saja ... pergi dari SELECT).
keluaran:
Bagaimana memperbaikinya? Tidak tahu, tetapi seperti yang saya katakan di atas, menggunakan driver Oracle 11g ojdbc6.jar, kueri yang sama berfungsi (bahkan terhubung dengan database Oracle 12c...).
Perilakunya cukup acak. Sepertinya itu tergantung pada huruf pertama kolom yang digunakan dalam UPDATE. Jika dimulai dengan F dan H selalu gagal, tapi saya tidak tahu apakah ada kondisi lain.