Bởi vì cả hai lớp đều có trong classpath thời gian biên dịch của bạn và IDE của bạn đang cố gắng trở nên hữu ích.
Bởi vì prepareStatement()
là chỉ định
để trả về java.sql.PreparedStatement
, không phải com.mysql.jdbc.PreparedStatement
.
java.sql.PreparedStatement
là một giao diện và bạn nên sử dụng cái này mọi lúc. MySQL là một triển khai cụ thể và bạn không nên kết hợp chặt chẽ mã JDBC của mình với triển khai MySQL cụ thể. Nếu không, bạn sẽ phải thực hiện nhiều thay đổi trong mã của mình nếu bạn muốn chuyển máy chủ DB (và do đó cũng là trình điều khiển JDBC) sang một nhà cung cấp khác như PostgreSQL. Nếu bạn đang sử dụng giao diện JDBC chuẩn từ java.sql
mọi lúc, tất cả những gì bạn cần thay đổi chỉ là URL JDBC và có thể là tên người dùng và mật khẩu và một số câu lệnh SQL dành riêng cho DB.