programing

JDBC를 사용하여 추출 및 재삽입 시 SQL datetime(6)의 정밀도를 유지하는 방법

itsource 2022. 9. 28. 23:29
반응형

JDBC를 사용하여 추출 및 재삽입 시 SQL datetime(6)의 정밀도를 유지하는 방법

MariaBD 인스턴스를 읽고 모델 클래스의 인스턴스를 조립하여 미러 데이터베이스 인스턴스에 저장하는 Java 프로그램을 작성해야 합니다.업스트림 데이터베이스에서는 마이크로초의 정밀도를 위해 datetime(6) 데이터 유형을 사용합니다.다운스트림 데이터베이스의 필드가 업스트림 데이터베이스와 동일한 정밀도를 가져야 합니다.그러나 데이터가 JDBC 코드를 통과하면 마지막 소수점 이하 3자리가 손실됩니다.

Java 앱에 존재하는 필드를 나타내는 다양한 Java 데이터 유형(LocalDateTime, Calendar, long)을 사용해 실험했지만 성공하지 못했습니다.

마지막으로 모델 클래스를 건너뛰어 무슨 일이 일어나는지 확인하고 업스트림 결과 세트의 값을 준비된 스테이트먼트에 직접 전달하여 다운스트림에 삽입했습니다(아래 코드 예 참조).놀랍게도 이 값은 초 단위로 단축되었습니다.

정밀도를 유지하는 비결이 뭔가요?

    try (Connection connection1 = dataSource1.getConnection();
            Connection connection2 = dataSource2.getConnection();
            PreparedStatement selectStmt = connection1.prepareStatement("SELECT * FROM foo_upstream");
            PreparedStatement insertStmt = connection2.prepareStatement("INSERT INTO foo_downstream (foo_id, sql_timestamp) VALUES (?, ?)")) {

        try (ResultSet rs = selectStmt.executeQuery()) {

            while(rs.next()) {

                insertStmt.setLong(1, rs.getInt("foo_id"));
                insertStmt.setTimestamp(2, rs.getTimestamp("sql_timestamp"));

                insertStmt.addBatch();
            }
        }

        insertStmt.executeUpdate();
    }

[스파이크 코드를 수정하여 업스트림과 다운스트림의 데이터 소스가 다르다는 것을 명확히 합니다.이러한 데이터 소스는, 같은 타임 존 설정을 가지는 것은 보증되지 않습니다.]

언급URL : https://stackoverflow.com/questions/49662295/how-to-maintain-the-milisecond-precision-of-a-sql-datetime6-when-extracting-an

반응형