2014-09-09 1 views
0

rs은 PreparedStatement 또는 Statement 객체의 실행으로 얻은 ResultSet이라고 가정합니다. Integer data = rs.getInt(1)을 사용하여 ResultSet에서 정수 값을 추출하려고했지만 사장님이 Integer data = new Integer(rs.getString(1)) 또는 Integer data = Integer.valueOf(rs.getString(1))을 대신 사용하라고했습니다. 나는 그 이유를 이해하지 못한다. 누구든지 getInt 대신 getString을 사용하면 어떤 이점이 있는지 말해 줄 수 있습니까?getInt()와 새로운 Integer (getString())의 차이점은 무엇입니까?

+0

나는 상사에게 물어보기를 제안합니다 :) 일반적으로 이점은 없지만 데이터베이스의 int 값을 문자열로 저장하므로 캐스트해야합니다. 수동으로. – mishadoff

+0

사장님 께 왜 동기 부여를 부탁하십시오. 모든 RDBMS가 앞서 언급 한 접근 방식을 취하는 것은 아닙니다. 어떤 사람들은 데이터베이스'NUMERIC' 타입의 데이터 타입으로부터 곧바로'getInt()'호출로부터'int'를 반환 할 수도 있습니다. 관련 RDBMS 벤더에 의해'ResultSet'의 구현에 의존합니다. 가장 좋은 방법은'ResultSetMetaData'를 사용하여 정확한 데이터 타입 매핑을 얻고 각각의 getter 메소드를 호출하는 것입니다. –

+0

데이터베이스 열 유형에 따라 다릅니다. –

답변

1

ResultSet.getString()String 개체를 반환하고 ResultSet.getInt()int 값을 반환합니다.

ResultSet.getString() 모든 개체는 String (Object.toString())으로 변환 될 수 있기 때문에 모든 경우에 적용됩니다. ResultSet.getInt()은 기본 SQL 데이터 유형이 숫자이고 int에 맞는 경우에만 작동합니다.

따라서 ResultSet.getString()은 더 유연하지만 숫자가 이미 정수 인 경우 분명히 덜 효과적입니다. 또한 데이터베이스에 문자열로 숫자를 저장하는 경우가 적습니다 (이 변환이 필요합니다). ResultSet.getInt()의 javadoc의 데이터가 SQL NULL의 (당신이 원하는 것이 아닐 수도 있습니다 입력해도)의 경우는 값 0이 반환한다고 때문에

null 값은 정말 문제가되지이다. new Integer(rs.getString(1))NumberFormatException입니다.

+1

'getInt()'를 사용할 때'NULL '값을 확인하려면'ResultSet.wasNull()'이 있습니다. –

+0

감사합니다. icza, 내 보스는 내부 데이터베이스에서 값이 null 일 때 NumberFormatException을 검사하려고합니다. – Chris

+0

JDBC 4.2 사양의 부록 B를 보면 모든 데이터 유형에 대해 getString이 지원되지 않는다고 가정합니다. –

0

필드에 SQL NULL이 포함되어 있으므로 java 정수가 java null을 보유하게 만들 수 있습니다. 기본 유형이 int 인 경우이 작업을 수행 할 수 없습니다.

열 정의를 확인할 수 있습니다. NOT NULL 제약 조건이 없기를 기대합니다.

+1

원시 타입의 NULL 값을 확인하려면 'ResultSet.wasNull()'이 있습니다. –

0

Integer.valueOf (rs.getString (1))의 경우 NumberFormatException을 검사하여 예를 들어 data = null로 처리 할 수 ​​있습니다. rs.getInt (1)의 경우 null 마커 대신 올바른 정수 "0"값을 받게됩니다. 따라서 빈 필드라는 사실을 알지 못하고 null이 필요한 경우 논리를 작성할 수 없으므로 다른 경우가 필요할 수 있습니다 처리 - 예외 또는 임의의 기본값이나 다른 "if"절 등

관련 문제