PreparedStatement setNull (..)


88

Java PreparedStatement, açık bir şekilde Null değeri ayarlama olanağı sağlar. Bu olasılık:

prepStmt.setNull(parameterIndex, Types.VARCHAR);

Bu çağrının anlam bilgisi, belirli bir setType'ı null parametresi ile kullanırken aynı mıdır?

prepStmt.setString(null);

?

Yanıtlar:


76

Bu kılavuz şunları söylüyor:

6.1.5 JDBC NULL'u IN parametresi olarak gönderme

SetNull yöntemi, bir programcının bir JDBC NULL (genel bir SQL NULL) değerini veritabanına bir IN parametresi olarak göndermesine izin verir. Bununla birlikte, yine de parametrenin JDBC tipinin belirtilmesi gerektiğini unutmayın.

Bir setXXX yöntemine bir Java null değeri iletildiğinde (Java nesnelerini bağımsız değişken olarak alırsa) veritabanına JDBC NULL da gönderilecektir. Ancak setObject yöntemi, yalnızca JDBC türü belirtilmişse boş bir değer alabilir.

Yani evet eşdeğerler.


2
+1: İlginç. SetXXX'in null'larla nasıl çalıştığını varsaymıştım, ancak gerçekten test etmedim veya bunun için belgeleri okumadım.
Powerlord

2
Potansiyel olarak boş bir tamsayı kullanmak istediğim durumda myPreparedStatement.setInteger (myIntegerObject) (tam yöntem adının olmadığını görmeme rağmen) gibi bir şey olduğunu sanmıyorum? Aksi takdirde, bir if / else ifadesi kullanmam gerekecek, bir şekilde .setInt () 'i ve diğer şekilde .setNull ()' u çağırarak, bu biraz sıkıcı görünüyor.

@ardave, evet son paragrafımla
kastettiğim buydu

1
Eski olduğunu biliyorum ama bu bağlantı koptu.
Moob

1
Yeni bağlantı: PreparedStatement
candidus

77

ama buna dikkat edin ....

Long nullLong = null;

preparedStatement.setLong( nullLong );

-boş işaretçi istisnasını atar-

çünkü protype

setLong( long )   

DEĞİL

setLong( Long )

seni yakalamak güzel eh.


Aslında beni buraya getiren örnek bu.
sf_jeff

13

Sonunda küçük bir test yaptım ve programlarken aklıma, setNull (..) metodu olmadan Java ilkelleri için boş değerler koymanın bir yolu olmayacağı aklıma geldi. Nesneler için her iki yol

setNull(..)

ve

set<ClassName>(.., null)) 

aynı şekilde davranın.


10

Ayrıca kullanmayı da düşünebilirsiniz preparedStatement.setObject(index,value,type);


4
preparedStatement.setNull(index, java.sql.Types.NULL);

bu her tür için çalışmalıdır. Bazı durumlarda sunucu tarafında hata meydana gelse de, örneğin: SQL için:

COALESCE(?, CURRENT_TIMESTAMP)

Oracle 18XEyanlış türde başarısız olursa: beklenen DATE, var STRING- bu tamamen geçerli bir başarısızlıktır;

Alt satır: ararsanız türü bilmek iyidir .setNull()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.