2009-08-31 6 views
62

Java PreparedStatement cung cấp khả năng đặt rõ ràng giá trị Null. Khả năng này là:Bộ lập sẵn được chuẩn bịNull (..)

prepStmt.setNull(<n>, Types.VARCHAR) 

Ngữ nghĩa của cuộc gọi này giống như khi sử dụng một setType có giá trị null?

prepStmt.setString(null) 

?

Trả lời

53

này guide nói:

6.1.5 Gửi JDBC NULL như một tham số TRÊN

Phương pháp setNull cho phép một lập trình viên để gửi một JDBC NULL (một SQL NULL generic) giá trị cho các cơ sở dữ liệu như một TRÊN tham số. Tuy nhiên, lưu ý rằng người ta vẫn phải chỉ định kiểu JDBC của tham số.

Một JDBC NULL cũng sẽ được gửi đến cơ sở dữ liệu khi một giá trị rỗng Java được chuyển đến phương thức setXXX (nếu nó lấy đối tượng Java làm đối số). Tuy nhiên, phương thức setObject có thể chỉ lấy giá trị null nếu kiểu JDBC được chỉ định.

+1

+1: Thú vị. Tôi cho rằng đó là cách setXXX làm việc với null, nhưng tôi chưa bao giờ thực sự thử nghiệm nó hoặc đọc tài liệu cho nó. – Powerlord

+1

Tôi không cho rằng có một cái gì đó như myPreparedStatement.setInteger (myIntegerObject) (mặc dù tôi thấy rằng tên phương pháp chính xác không tồn tại) trong trường hợp tôi muốn sử dụng một số nguyên có khả năng null? Nếu không, tôi sẽ phải sử dụng câu lệnh if/else, gọi hàm .setInt() một cách và .setNull() theo cách khác, có vẻ hơi tẻ nhạt. –

+0

@ardave, vâng, đó là ý của tôi trong đoạn cuối cùng của tôi – djna

12

Cuối cùng tôi đã làm một thử nghiệm nhỏ và trong khi tôi đã lập trình nó, tôi nghĩ rằng nếu không có phương thức setNull (..) sẽ không có cách nào để thiết lập các giá trị null cho Java nguyên thủy. Đối với các đối tượng cả hai cách

setNull(..) 

set<ClassName>(.., null)) 

cư xử theo cùng một cách.

59

nhưng xem ra cho việc này ....

Long nullLong = null; 

preparedStatement.setLong(nullLong); 

-thows con trỏ null exception-

vì trươc khi là

setLong(long) 

KHÔNG

setLong(Long) 

đẹp một để bắt bạn ra eh.

3

Bạn cũng có thể xem xét sử dụng preparedStatement.setObject(index,value,type);