Bằng cách gọi executeQuery(sql) bạn thực sự gọi một phương thức trên Statement - không có trên PreparedStatement . Vì vậy, bạn loại bỏ giá trị tham số đã được chỉ định và thực hiện một truy vấn trong đó trình giữ chỗ ? vẫn chưa được phân tích - vì vậy bạn sẽ gặp lỗi đó.
Thay đổi
ResultSet results = state.executeQuery(sql);
đến
ResultSet results = state.executeQuery();
và bạn sẽ ổn thôi.
(Và nguyên nhân
resultname = state2.executeQuery(sql2);
cần phải được
resultname = state2.executeQuery();
nữa)