PreparedStatement setNull (..)


88

Java PreparedStatement는 Null 값을 명시 적으로 설정할 수있는 가능성을 제공합니다. 이 가능성은 다음과 같습니다.

prepStmt.setNull(parameterIndex, Types.VARCHAR);

이 호출의 의미는 널 매개 변수와 함께 특정 setType을 사용할 때와 동일합니까?

prepStmt.setString(null);

?

답변:


76

가이드 는 다음과 같이 말합니다.

6.1.5 JDBC NULL을 IN 매개 변수로 보내기

프로그래머는 setNull 메소드를 사용하여 JDBC NULL (일반 SQL NULL) 값을 IN 매개 변수로 데이터베이스에 보낼 수 있습니다. 그러나 매개 변수의 JDBC 유형을 지정해야합니다.

Java null 값이 setXXX 메서드에 전달 될 때 JDBC NULL도 데이터베이스로 전송됩니다 (Java 개체를 인수로 사용하는 경우). 그러나 setObject 메소드는 JDBC 유형이 지정된 경우에만 널값을 가질 수 있습니다.

네, 그들은 동등합니다.


2
+1 : 흥미 롭군요. 나는 그것이 setXXX가 null과 함께 작동하는 방식이라고 가정했지만 실제로 테스트하거나 문서를 읽지 않았습니다.
Powerlord

2
잠재적으로 null 정수를 사용하려는 경우 myPreparedStatement.setInteger (myIntegerObject) (정확한 메서드 이름이 존재하지 않음을 알지만)과 같은 것이 있다고 가정하지 않습니다. 그렇지 않으면 if / else 문을 사용하여 .setInt ()를 한 방향으로 호출하고 .setNull ()을 다른 방법으로 호출해야합니다. 약간 지루해 보입니다.

@ardave, 네 그것이 내 마지막 단락에서 의미하는 바입니다
djna

1
나는 그것의 오래된 것을 알고 있지만 그 연결은 끊어졌습니다.
Moob


77

근데 이거 조심해 ....

Long nullLong = null;

preparedStatement.setLong( nullLong );

-null 포인터 예외 발생-

프로토 타입이

setLong( long )   

아니

setLong( Long )

당신을 잡을 좋은 사람 eh.


그것이 실제로 저를 여기로 가져온 예입니다.
sf_jeff

13

마지막으로 작은 테스트를 수행했고 프로그래밍하는 동안 setNull (..) 메서드가 없으면 Java 기본 요소에 대해 null 값을 설정할 방법이 없다는 사실이 생각났습니다. 객체의 경우 양방향

setNull(..)

set<ClassName>(.., null)) 

같은 방식으로 행동합니다.


10

사용을 고려할 수도 있습니다. preparedStatement.setObject(index,value,type);


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

모든 유형에서 작동합니다. 경우에 따라 서버 측에서 오류가 발생하지만 SQL의 경우 :

COALESCE(?, CURRENT_TIMESTAMP)

Oracle 18XE잘못된 유형으로 실패 : expected DATE, got- STRING완벽하게 유효한 실패입니다.

요점 : 전화하면 유형을 아는 것이 좋습니다. .setNull()

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.