복붙노트

[SQL] java.sql.Date 대 java.util.Date

SQL

java.sql.Date 대 java.util.Date

java.sql.Date 대 java.util.Date : 때 사용하는 이유는 무엇입니까?

해결법

  1. ==============================

    1.날짜 클래스 처리 : 축하합니다, 당신은 JDBC 내 좋아하는 애완 동물 초조 충돌했습니다.

    날짜 클래스 처리 : 축하합니다, 당신은 JDBC 내 좋아하는 애완 동물 초조 충돌했습니다.

    기본적으로 데이터베이스는 일반적으로 날짜, 시간, 타임 스탬프입니다 날짜 필드의 적어도 세 가지 형태를 지원합니다. 이들 각각은 JDBC에서 해당 클래스를 가지고 그들 각각은 java.util.Date을 확장합니다. 이 세 가지의 각각의 빠른 의미는 다음과 같다 :

    이러한 세 가지 유형과 관련하여 JDBC 드라이버를 사용할 때 가장 일반적인 버그 중 하나는 유형을 잘못 처리하는 것입니다. sql.Date이 시간대 특정 것을이 수단은 sql.Time는 현재 연도, 월, 일 등등 등등이 포함되어 있습니다.

    정말, 필드의 SQL 유형에 따라 다릅니다. PreparedStatement로는 sql.Timestamp위한 sql.Time 및 #setTimestamp위한 sql.Date, #setTime ()에 대해 하나 인, #setDate () 세 값 족있다.

    메모를 수행 당신이 ps.setObject (fieldIndex, utilDateObject)를 사용하는 경우; 당신은 실제로 올바른 유형했지만, 당신이 나중에 데이터를 요청할 때, 당신은 당신이 실제로 물건을 놓치고있는 것을 알 수있는 것처럼 행복을 삼킬 것입니다 대부분의 JDBC 드라이버에 정상 util.Date를 제공 ​​할 수 있습니다.

    내가 밀리 세컨드 저장 / 일반 걷고 같은 나노초하고 어떤으로 변환한다는하고하면 (의무 joda 시간 플러그)를 사용하는 오브젝트. 할 수있는 한 해키 방법은 20,100,221와 154536123.이 마법의 숫자는 SQL 쿼리에 사용할 수 있으며 다른 데이터베이스에서 휴대용 될 것입니다 것 지금 예를 들어, 다른 한 일 및 시간 구성 요소로 날짜 구성 요소를 저장하는 것입니다 당신이 JDBC / 자바 날짜 API의이 부분을 피할 수있게된다 : 완전히이야.

  2. ==============================

    2.LATE 편집 : 자바 8을 시작으로 당신은 모든 피하기 그것을 java.util.Date도 java.sql.Date 할 수 있다면 어느 쪽을 사용하고, 대신에 오히려 무엇보다 (Joda 기준) java.time 패키지를 사용하여 선호한다. 자바 8하지 않은 경우, 여기에 원래 응답입니다 :

    LATE 편집 : 자바 8을 시작으로 당신은 모든 피하기 그것을 java.util.Date도 java.sql.Date 할 수 있다면 어느 쪽을 사용하고, 대신에 오히려 무엇보다 (Joda 기준) java.time 패키지를 사용하여 선호한다. 자바 8하지 않은 경우, 여기에 원래 응답입니다 :

    java.sql.Date - 당신이 (JDBC 등)를 사용하는 라이브러리의 방법 / 생성자를 호출 할 때. 아니, 그렇지. 당신은 응용 프로그램 / 명시 적으로 JDBC를 처리하지 않는 모듈에 대한 데이터베이스 라이브러리 의존성을 소개하고 싶지 않아요.

    java.util.Date - 사용 라이브러리를 사용하는 경우. 그렇지 않으면, 여러 가지 이유로 가능한 한 작은, 같은 :

    당신이 Joda 같은 새로운 의존성을 소개하는 잔인한 생각한다면, 걷고 유형의 안전 및 문서로, 주변을 통과 할 때 나 자신은 보통 j.u.D에서 그들을 포장하지만, 모든 나쁜 개체에서 타임 스탬프 필드에 사용하는 것이 있습니다.

  3. ==============================

    3.java.sql.Date을 사용하는 유일한 시간은 PreparedStatement.setDate입니다. 그렇지 않으면, java.util.Date를 사용합니다. ResultSet.getDate가 java.sql.Date을 반환하지만이 java.util.Date에 직접 할당 될 수 있음을 말하고있다.

    java.sql.Date을 사용하는 유일한 시간은 PreparedStatement.setDate입니다. 그렇지 않으면, java.util.Date를 사용합니다. ResultSet.getDate가 java.sql.Date을 반환하지만이 java.util.Date에 직접 할당 될 수 있음을 말하고있다.

  4. ==============================

    4.이 사람은 내가 같은 문제, 내가 준비된 문에 현재 날짜를 삽입 할 수있는 쉬운 방법을 가지고 있습니다 :

    이 사람은 내가 같은 문제, 내가 준비된 문에 현재 날짜를 삽입 할 수있는 쉬운 방법을 가지고 있습니다 :

    preparedStatement.setDate(1, new java.sql.Date(new java.util.Date().getTime()));
    
  5. ==============================

    5.자바의 java.util.Date 클래스는 특정 시점을 나타내는 (예, · G. 2013 년 11월 25일 16시 30분 45초 밀리 초에 다운),하지만 DB에서 DATE 데이터 유형은 날짜를 나타낸다 (예를 들어, 2013 11월 25일). 실수로 DB에 java.util.Date 객체를 제공에서 당신을 방지하기 위해, 자바는 직접 java.util.Date에 대한 SQL 매개 변수를 설정하는 것을 허용하지 않습니다 :

    자바의 java.util.Date 클래스는 특정 시점을 나타내는 (예, · G. 2013 년 11월 25일 16시 30분 45초 밀리 초에 다운),하지만 DB에서 DATE 데이터 유형은 날짜를 나타낸다 (예를 들어, 2013 11월 25일). 실수로 DB에 java.util.Date 객체를 제공에서 당신을 방지하기 위해, 자바는 직접 java.util.Date에 대한 SQL 매개 변수를 설정하는 것을 허용하지 않습니다 :

    PreparedStatement st = ...
    java.util.Date d = ...
    st.setDate(1, d); //will not work
    

    하지만 여전히 당신이 힘 / 의사에 의해 (다음 시간 및 분은 DB 드라이버에 의해 무시됩니다) 그렇게 할 수 있습니다. 이것은 java.sql.Date 클래스로 이루어집니다 :

    PreparedStatement st = ...
    java.util.Date d = ...
    st.setDate(1, new java.sql.Date(d.getTime())); //will work
    

    java.sql.Date 객체는 (그것이 java.util.Date에서 구조에 쉽게 그래서)하지만 당신은 (되 그것의 개념을 적용 할 수있는 시간을 요청하려고하면 예외가 발생합니다 시간에 순간을 저장할 수 있습니다 날짜 만 해당). DB를 드라이버가이 클래스를 인식하고 단지 시간 동안 공을 사용할 것으로 예상된다. 이 시도:

    public static void main(String[] args) {
      java.util.Date d1 = new java.util.Date(12345);//ms since 1970 Jan 1 midnight
      java.sql.Date d2 = new java.sql.Date(12345);
      System.out.println(d1.getHours());
      System.out.println(d2.getHours());
    }
    
  6. ==============================

    6.java.util.Date는 밀리 초 정밀도 시간에 특정 순간을 나타냅니다. 이 시간대없이 모두 날짜와 시간 정보를 나타냅니다. java.util.Date 클래스가 구현 직렬화, Cloneable을하고 Comparable 인터페이스. 그것은 java.sql.Date, java.sql.Time의 인터페이스와의 java.sql.Timestamp 의해 상속된다.

    java.util.Date는 밀리 초 정밀도 시간에 특정 순간을 나타냅니다. 이 시간대없이 모두 날짜와 시간 정보를 나타냅니다. java.util.Date 클래스가 구현 직렬화, Cloneable을하고 Comparable 인터페이스. 그것은 java.sql.Date, java.sql.Time의 인터페이스와의 java.sql.Timestamp 의해 상속된다.

    java.sql.Date 시간 정보가없는 날짜를 나타내는 java.util.Date 클래스를 확장하고 데이터베이스를 처리 할 때 만 사용되어야한다. SQL 날짜의 정의에 부합하기 위해, java.sql.Date 인스턴스 래핑 밀리 초 값은 인스턴스와 연관된 특정 시간대에 제로 시간, 분, 초, 밀리 초 단위로 설정하여 "정규화"해야 .

    그것은 예는 getHours (AS java.util.Date 모든 공용 방법) 다음 getMinutes 상속 (), 후 getSeconds ()하여 setHours () setMinutes ()하여 setSeconds (). java.sql.Date의 시간 정보를 저장하지 않기 때문에, 그것은 그들의 구현 세부 사항에서 증거로 호출하면 이러한 방법의 모든 java.lang.IllegalArgumentException가 던져 java.util.Dateand에서 모든 시간 작업을 우선합니다.

  7. from https://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date by cc-by-sa and MIT license