CodeGym/Java Course/All lectures for KO purposes/JDBC의 데이터 유형 협상

JDBC의 데이터 유형 협상

사용 가능

데이터 유형

표를 살펴보겠습니다.

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe...
ID java.lang.Integer 지능 4
이름 java.lang.string VARCHAR 12
수준 java.lang.Integer 지능 4
만든 날짜 java.sql.날짜 날짜 91
종료 코드 0으로 프로세스 완료

세 번째 열에는 INT , VARCHAR , DATE 유형이 표시됩니다 . 이들은 SQL 서버 유형입니다. 서버 수단은 그가 알고 있는 유형의 데이터를 제공합니다. 이러한 유형은 어떻게 Java 유형으로 변환됩니까?

이것은 정확히 JDBC로 표준화된 것 중 하나입니다. JDBC 작성자는 SQL 유형 목록을 수정하는 것으로 시작했습니다. 상수가 있는 특수 클래스가 있습니다.

class java.sql.Types {
   public static final int CHAR         =   1;
   public static final int NUMERIC    	=   2;
   public static final int DECIMAL     	=   3;
   public static final int INTEGER      =   4;
   public static final int FLOAT        =   6;
   public static final int REAL         =   7;}

번호는 클래스의 일련 번호가 아니라 SQL 사양의 SQL 유형 목록에 있는 ID 유형입니다. 강의 시작 부분의 예에서 본 숫자입니다.

또한 ResultSet 클래스에는 한 데이터 유형을 다른 데이터 유형으로 변환할 수 있는 메소드가 있습니다. 모든 유형이 서로 변환될 수는 없지만 논리는 충분히 명확합니다. 다음은 유용한 스프레드시트입니다.

방법 SQL 데이터 유형
정수 getInt() 숫자, 정수, 십진수
플로트 getFloat() 숫자, 정수, 십진수, 실수, 실수
더블 getDouble() 숫자, 정수, 십진수, 실수, 실수
날짜 getDate() 날짜, 시간, 타임스탬프
시간 getTime() 날짜, 시간, 타임스탬프
타임스탬프 getTimestamp() 날짜, 시간, 타임스탬프
문자열 getString() 차르, 바차르

모든 SQL 유형 중에서 일부 그룹은 명확하게 구별할 수 있습니다.

  • 숫자
  • 시간
  • 윤곽
  • 바이트 개체

그건 그렇고, getInt() 메서드를 보셨나요 ?

JDBC 및 NULL

ResultSet 클래스 의 getInt() 메서드 에 어떤 문제가 있는지 알아차렸습니까 ? 서명을 다시 살펴보겠습니다.

int getInt(column)

이 메서드는 Integer가 아닌 int를 반환합니다. JDBC 유형 Integer가 생성될 당시에는 아직 존재하지 않았기 때문입니다. 좋아, 말해 보자. 그런 다음 질문이 있습니다.

데이터베이스에 INT일 수도 있지만 NULL일 수도 있는 INT NULL 열이 있는 테이블이 있습니다. 이 열에서 null 값을 어떻게 얻을 수 있습니까?

걱정하지 마십시오. 모든 것이 당신을 위해 생각되었습니다.

솔루션 1 . Java의 SQL 유형이 날짜 또는 문자열과 같은 참조 유형으로 표시되는 경우 문제가 없습니다 . 이 유형의 변수는 null 값을 가질 수 있습니다.

솔루션 2 . 기본 유형은 null일 수 없으므로 getInt() 와 같은 메서드는 단순히 기본값을 반환합니다 . int의 경우 0, float의 경우 0.0f, double의 경우 0.0d 등입니다.

그런 다음 0 또는 NULL 열에 무엇이 있는지 이해하는 방법은 무엇입니까? 그리고 당은 이 질문에 대한 답을 가지고 있습니다.

솔루션 3 . ResultSet 클래스에는 메서드가 NULL 대신 다른 값을 반환한 경우 true를 반환하는 특별한 wasNull() 메서드가 있습니다 .

모든 것이 내가 여기에 쓴 대로 정확하게 작동합니다. 예:

ResultSet results = staatement.executeQuery("SELECT * FROM user");
    int level = results.getInt("level");

if (results.wasNull()) {
    System.out.println("Level is null");
} else {
   System.out.println("Level is " + level);
    }

getInt() 메서드를 호출할 때 null을 반환해야 하는 경우 wasNull() 메서드는 true를 반환하고, 그렇지 않으면 wasNull() 메서드 는 false를 반환합니다.

이것은 기본 유형에 대해서만 작동하는 것이 아닙니다.

ResultSet results = staatement.executeQuery("SELECT * FROM user");
    String name = results.getString("name");

 	if (results.wasNull()) {
 	    System.out.println("Name is null");
 	} else {
 	   System.out.println("User name is " + name);
    }

이것은 물론 목발입니다. 그러나 NullPointerException 에는 문제가 없습니다 . 모든 것에서 긍정적인 면을 확인하세요 :)

JDBC의 데이터 유형에 어떤 문제가 있습니까?

테스트를 계속합시다. getDate(column) 메소드를 자세히 살펴보십시오 . 그에게 무슨 문제가 있습니까? 이 메서드의 결과 유형은 다음과 같습니다.

java.sql.Date

null을 저장할 수 있으며 이 정도면 충분합니다. 그러나 여전히 그에게 문제가 있습니다. 단서! 올바른 날짜 유형은 다음과 같습니다.

java.util.Date

그들은 다른 패키지를 가지고 있습니다! 이들은 일반적으로 다른 유형의 데이터입니다. 그리고 여기에 이유가 있습니다...

20세기 70년대 이후의 데이터베이스는 시간 저장을 위해 3가지 유형의 데이터를 지원합니다.

  • DATE - 날짜를 저장합니다: 년, 월, 일.
  • TIME - 시간 저장: 시, 분, 초.
  • TIMESTAMP - 특정 시점(날짜, 시간 및 밀리초)을 저장합니다.

처음 10년 동안 Java 언어에는 UNIX TIME 형식으로 특정 시점(1970년 초 이후의 밀리초 수)을 저장하는 하나의 데이터 유형인 java.util.Date 만 있었습니다.

따라서 JDBC 표준의 작성자는 특히 JDBC를 위해 세 가지 데이터 유형을 Java에 추가했습니다.

  • java.sql.날짜
  • java.sql.시간
  • java.sql타임스탬프

따라서 ResultSet 인터페이스 의 메소드에는 고정 데이터 유형이 포함됩니다.

SQL 유형 자바 유형 방법
날짜 java.sql.날짜 java.sql.date getDate()
시간 java.sql.시간 java.sql.Time getTime()
타임스탬프 java.sql.타임스탬프 java.sql.Timestamp getTimestamp()

그리고 이것은 여기에서 볼 수 있는 유형입니다.

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe...
ID java.lang.Integer 지능 4
이름 java.lang.string VARCHAR 12
수준 java.lang.Integer 지능 4
만든 날짜 java.sql.날짜 날짜 91
종료 코드 0으로 프로세스 완료

여기에 무엇이 빠졌는지 맞춰보세요? Java DateTime API에 나타난 데이터 유형:

  • 현지 날짜
  • 현지 시각
  • LocalDateTime
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다