PreparedStatement setNull (..) 같습니다. prepStmt.setNull(parameterIndex, Types.VARCHAR); 이

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

prepStmt.setNull(parameterIndex, Types.VARCHAR);

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

prepStmt.setString(null);

?



답변

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

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

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

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

네, 그들은 동등합니다.


답변

근데 이거 조심해 ….

Long nullLong = null;

preparedStatement.setLong( nullLong );

-null 포인터 예외 발생-

프로토 타입이

setLong( long )

아니

setLong( Long )

당신을 잡을 좋은 사람 eh.


답변

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

setNull(..)

set<ClassName>(.., null))

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


답변

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


답변

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

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

COALESCE(?, CURRENT_TIMESTAMP)

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

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


답변