2016-11-17 2 views
0

데이터베이스에 매우 큰 테이블이 있습니다. 필드의 일부는 null 일 수 있습니다.사용을 피하는 방법 PreparedStatement.setNull?

난 그냥 사용에서 탈출 할

:

PreparedStatement.setNull(index, Type.X) 

처럼 :

if(obj.getSomaData() == null){ 
    insertStmt.setNull(++i, java.sql.Types.VARCHAR); 
}else{ 
    insertStmt.setString(++i, obj.getSomaData()); 
} 

이 할 수있는 더 깨끗한 방법은있다를?

추신 : 저는 PostgreSQL을 사용하고 있습니다.

+0

'setNull()'메서드를 사용하고 싶지 않다는 뜻입니까? 데이터를 INSERT하는 경우 기본적으로 NULL 값을 가지므로 NULL 값을 명시 적으로 설정할 필요가 없습니다. –

+1

나는 Postgres JDBC 드라이버가'setString (index, null)'을 아주 잘 처리한다고 생각한다. –

+0

@MickMnemonic 그 열이 insert 문에 포함되지 않은 경우에만 true이고, 포함되어 있으면 JDBC 드라이버는 예외를 주어야한다. 값은 명시 적으로 설정되지 않습니다. JDBC 4.2 섹션 13.2.2를 참조하십시오. _ "PreparedStatement' 객체 ('executeQuery','executeUpdate' 및'execute')를 실행하는 데 사용되는 메소드는 매개 변수 마커에 값이 제공되지 않으면'SQLException'을 throw합니다. "_ –

답변

3

기본 유스 케이스 setNull은 기본 유형을 null로 설정하고 드라이버가 매개 변수의 데이터 유형을 알 수 없으며 명시 적으로 지시해야하는 경우를 처리하는 데 사용됩니다.

대부분의 경우 setString(idx, null) (또는 다른 객체 유형의 setXXX)을 사용할 수 있어야합니다.

자바 null 자바 객체를 가지고 세터 방법 중 하나에 전달되면

이 매개 변수는 JDBC NULL로 설정됩니다

는 JDBC 4.2 절 13.2.2.4을 인용합니다.

예외가 최대 휴대 성을 위해 사용할 것을 제안되는 경우, (setObject를 사용하여 예) null에 '지정되지 않은'위해 만들어 setNull 또는하지 모든 데이터베이스 지원을 유형 매개 변수를 취하는 setObject 유형이없는 정보.

관련 문제