Dengan menjalankan executeQuery(sql) Anda benar-benar memanggil metode pada Statement - tidak di PreparedStatement . Jadi Anda membuang nilai parameter yang sudah ditetapkan dan menjalankan kueri di mana ? . placeholder tetap tidak diuraikan - jadi Anda mendapatkan kesalahan itu.
Ubah
ResultSet results = state.executeQuery(sql);
ke
ResultSet results = state.executeQuery();
dan Anda akan baik-baik saja.
(Dan alasannya
resultname = state2.executeQuery(sql2);
perlu
resultname = state2.executeQuery();
juga)