반응형
jooq TIMESTAMP(6) 지원
TIMESTAMP(6) 타입의 컬럼이 있는 MariaDB 테이블에 밀리초의 정밀도로 타임스탬프를 삽입하기 위해 Java Juq 라이브러리를 사용하려고 합니다.예를 들어 코드 행은 다음과 같습니다.
eventRecord.setEventtimestamp(LocalDateTime.ofEpochSecond(Instant.parse("2021-05-18T16:47:31.862750Z").getEpochSecond() , Instant.parse("2021-05-18T16:47:31.862750Z").getNano(), ZoneOffset.UTC));
안타깝게도 MariaDB의 결과는 잘리고 밀리초도 삽입되지 않습니다.
2021-05-18 16:47:31.000000
테이블 구조는 다음과 같습니다.
MariaDB [plc_data]> DESCRIBE events;
+---------------------+--------------+------+-----+------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+------------------+-------+
| event_id | bigint(20) | NO | PRI | NULL | |
| eventTimestamp | timestamp(6) | YES | | NULL | |
| insertTimestamp | timestamp(6) | YES | | utc_timestamp(6) | |
| machineSerialNumber | int(11) | NO | | NULL | |
| data_block | longtext | NO | | NULL | |
+---------------------+--------------+------+-----+------------------+-------+
또한 두 개의 타임스탬프 필드에 대해 생성된 코드:
/**
* The column <code>plc_data.events.eventTimestamp</code>. GMT
*/
public final TableField<EventsRecord, Instant> EVENTTIMESTAMP = createField(DSL.name("eventTimestamp"), org.jooq.impl.SQLDataType.LOCALDATETIME.defaultValue(org.jooq.impl.DSL.field("NULL", org.jooq.impl.SQLDataType.LOCALDATETIME)), this, "GMT", new TimestampConverter());
/**
* The column <code>plc_data.events.insertTimestamp</code>. GMT
*/
public final TableField<EventsRecord, Instant> INSERTTIMESTAMP = createField(DSL.name("insertTimestamp"), org.jooq.impl.SQLDataType.LOCALDATETIME.defaultValue(org.jooq.impl.DSL.field("utc_timestamp(6)", org.jooq.impl.SQLDataType.LOCALDATETIME)), this, "GMT", new TimestampConverter());
그TimestampConverter
생성된 코드에서 볼 수 있는 클래스는 커스텀 컨버터입니다.
* Jooq converter to use Instant instead of SQL TIMESTAMP which is mapped
* into LocalDateTime
*/
public class TimestampConverter implements Converter<LocalDateTime, Instant> {
private static final long serialVersionUID = -2866811348870878385L;
/**
* Convert from {@code LocalDateTime} to {@code Instant}
*/
@Override
public Instant from(LocalDateTime databaseObject) {
return databaseObject.atZone(ZoneOffset.UTC).toInstant();
}
/**
* Convert from {@code Instant} to {@code Timestamp}
*/
@Override
public LocalDateTime to(Instant userObject) {
return userObject.atZone(ZoneOffset.UTC).toLocalDateTime();
}
/**
* Return the from Type Class (Database Type Class)
*/
@Override
public Class<LocalDateTime> fromType() {
return LocalDateTime.class;
}
/**
* Return the to Type Class (User type Class)
*/
@Override
public Class<Instant> toType() {
return Instant.class;
}
}
주크에게 내 데이트의 밀리초 부분을 삽입하도록 지시하는 방법은 무엇입니까?
안부 전해요,
s.
언급URL : https://stackoverflow.com/questions/68455732/jooq-timestamp6-support
반응형
'IT' 카테고리의 다른 글
Java의 split() 메서드는 닷()에서는 동작하지 않습니다. (0) | 2022.11.08 |
---|---|
코드 실행 속도: ASP.NET-MVC 대 PHP (0) | 2022.11.08 |
다른 Python 파일을 Import하려면 어떻게 해야 하나요? (0) | 2022.11.08 |
동일한 조건이 sql의 레코드에 나타날 때까지 행 값을 가져옵니다. (0) | 2022.11.07 |
메서드 호출에서 범용 인수를 명시적으로 지정하기 위한 Java-syntax (0) | 2022.11.07 |