MySQL/MariaDB의 ORLite 날짜(밀리초 정밀도)
ORLite 질문입니다.Android 앱과 Java 웹 서비스 모두에서 데이터를 유지하기 위해 사용하는 POJO 세트를 가지고 있습니다(각각 SQLite 및 MariaDB).5.3 이후로 MariaDB는 길이가 있는 타임스탬프/날짜 시간을 지원하여 필드의 정밀도를 마이크로초로 확장합니다(MySQL 자체가 새로운 dev 5.6 릴리스에서 이를 지원합니다).
그러나 명령행에서 수동으로 필드를 수정하여 열을 DATTIME(6)으로 설정하더라도 ORLite에서 내 날짜 필드를 밀리초 단위로 정확하게 유지할 수 없습니다.POJO에서 DATE_LONG 또는 DATE_STRING의 dataType을 사용할 수 있다는 것은 이해하지만, MariaDB에서 실제 DATETIME 유형을 사용하고 싶습니다.
제가 밀리초의 정밀도로 이것을 할 수 있는 방법이 있을까요?
질문 아래에 있는 댓글을 보고 여기서 무슨 일이 일어나고 있는지 이해하십시오.기본적으로 새 데이터베이스가 필요합니다.다음을 입력합니다(MariaDB와 함께 작업하는 경우 MySQL 하나만 하위 클래스로 지정).
public class MariaDBType extends MysqlDatabaseType {
private final static String DATABASE_URL_PORTION = "mysql";
private final static String DRIVER_CLASS_NAME = "org.mariadb.jdbc.Driver";
private final static String DATABASE_NAME = "MariaDB";
@Override
public boolean isDatabaseUrlThisType(String url, String dbTypePart) {
return DATABASE_URL_PORTION.equals(dbTypePart);
}
@Override
protected String getDriverClassName() {
return DRIVER_CLASS_NAME;
}
@Override
public String getDatabaseName() {
return DATABASE_NAME;
}
@Override
protected void appendDateType(StringBuilder sb, FieldType fieldType, int fieldWidth) {
/**
* TIMESTAMP in MySQL does some funky stuff with the last-modification time. Values are 'not null' by default
* with an automatic default of CURRENT_TIMESTAMP. Strange design decision.
*/
if (isDatetimeFieldWidthSupported()) {
sb.append("DATETIME(").append(fieldWidth).append(")");
} else {
sb.append("DATETIME");
}
}
public boolean isDatetimeFieldWidthSupported() {
return true;
}
}
이제 date dataType을 정상처럼 사용하여 밀리초 또는 마이크로초의 정밀도를 얻을 수 있습니다.저의 경우 너비에 대해 Gray의 기존 주석 매개변수를 사용했습니다(마이크로초가 아니라 밀리초의 정밀도만 필요한 경우에 적합).
@DatabaseField(columnName = Constants.TIMESTAMP, dataType = DataType.DATE, width = 3)
private Date timestamp;
마지막으로, 이 특정 문제를 해결하려는 경우 소수점 플래그를 잊지 마십시오.
private static JdbcPooledConnectionSource cSource = new JdbcPooledConnectionSource();
cSource.setDatabaseType(new MariaDBType());
cSource.setUrl("jdbc:mysql://localhost:3306/database?useFractionalSeconds=true");
cSource.setUsername("username");
cSource.setPassword("password");
언급URL : https://stackoverflow.com/questions/14947832/ormlite-date-in-mysql-mariadb-with-millisecond-precision
'programing' 카테고리의 다른 글
NSMutableAttributeString에서 링크 색상 변경 (0) | 2023.08.31 |
---|---|
C와 링크의 잠정적인 정의 (0) | 2023.08.31 |
CSS 클래스 .foo.bar (공백 없음)과 .foo.bar(공백 있음)의 차이점은 무엇입니까? (0) | 2023.08.31 |
PowerShell에서 변수가 8자 이상인지 테스트하려면 어떻게 해야 합니까? (0) | 2023.08.31 |
인터페이스 빌더에서 UIScrollView를 어떻게 사용합니까? (0) | 2023.08.26 |