Theo các tài liệu java của PreparedStatement.setNull: "Lưu ý: Bạn phải ghi rõ của tham số kiểu SQL ". Lý do mà phương thức yêu cầu loại SQL của cột là gì?
Để có khả năng tương thích tối đa; theo đặc điểm kỹ thuật, có một số cơ sở dữ liệu không cho phép NULL không được phân loại được gửi đến nguồn dữ liệu cơ bản.
Tôi nhận thấy rằng việc chuyển số java.sql.Types.VARCHAR cũng hoạt động cho các cột không phải là varchar. Có các trường hợp trong đó VARCHAR không phù hợp với (một số loại cột nhất định hoặc một số nhà cung cấp DB nhất định) không?
Tôi không nghĩ rằng loại hành vi đó thực sự là một phần của đặc điểm kỹ thuật hoặc nếu có, thì tôi chắc chắn có một số loại ép buộc ngầm đang diễn ra ở đó. Trong mọi trường hợp, dựa vào loại hành vi như vậy có thể phá vỡ khi thay đổi kho dữ liệu cơ bản không được khuyến khích. Tại sao không chỉ định đúng loại?
Nguồn
2010-11-22 08:35:34
1. Tôi vẫn không hiểu tại sao tôi phải khai báo loại. Theo như tôi biết lệnh UPDATE với SET MY_COLUMN = NULL sẽ làm việc trên tất cả các loại cột vậy tại sao nó không đủ? – MosheElisha
2. Tôi có một phương thức nhận chuỗi SQL và một Bộ sưu tập
@user: Về 1; như tôi đã đề cập, JDBC là một nỗ lực để chuẩn hóa sự tương tác với một cơ sở dữ liệu, nhưng mọi việc triển khai cơ sở dữ liệu đều có cách làm riêng của nó. Ví dụ: tôi đã nghe nói rằng Oracle phàn nàn nếu một loại thích hợp không được cung cấp khi thiết lập NULL. Do đó JDBC yêu cầu bạn chỉ định kiểu, cho dù việc triển khai JDBC cơ bản có chuyển nó vào cơ sở dữ liệu hay không là một thứ khác. Nó không thể được giúp đỡ nếu một giao thức cơ sở dữ liệu cụ thể dây quyết định rằng các loại được thông qua khi thiết lập giá trị NULL vì vậy không có điểm trong lý luận với điều đó. –