如何在mysql中编辑tinyblob日期?

时间:2016-12-12 12:48:44

标签: mysql date blob

我正在使用MySQL DB处理遗留应用程序。

以下是相关表格:

RESERVATION
============
id: int
creation_date: tinyblob
...other stuff...

创建实体时,使用Java的creation_date计算LocalDate.now()

当我从表中选择数据时(在MySQL Workbench中),我在creation_date列中只看到“BLOB”。当我点击“在编辑器中打开值”时,我会得到类似的内容:

’ sr 
java.time.Ser]º"H²  xpw  àx

当我双击该字段时,没有任何反应,它不会让我进入编辑模式。

有没有办法直接编辑这样存储的日期?我可以创建一个Java函数来插入除LocalDate.now()以外的一些日期,但是在Workbench(或其他一些应用程序)中手动执行此操作会更容易。由于这是一个遗留软件,我无法改变列类型。

TNX。

1 个答案:

答案 0 :(得分:0)

这是解决方案。这个人帮助了我:https://stackoverflow.com/a/8504540/1177067 创建一个扩展AttributeConverter的新类:

import java.time.LocalDateTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Object> {

@Override
public Object convertToDatabaseColumn(LocalDateTime locDateTime) {
    return locDateTime == null ? null : Timestamp.valueOf(locDateTime);
}

@Override
public LocalDateTime convertToEntityAttribute(Object sqlTimestamp) {
    if (sqlTimestamp != null) {
        try {
            byte[] dbBytes = (byte[]) sqlTimestamp;
            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(dbBytes));
            LocalDateTime covertedDateFromBytes = (LocalDateTime) ois.readObject();
            ois.close();
            return covertedDateFromBytes;
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } catch (ClassNotFoundException cnfe) {
            cnfe.printStackTrace();
        }
    }
    return null;
}

}

请注意:

@Override
public Object convertToDatabaseColumn(LocalDateTime locDateTime) {
    return locDateTime == null ? null : Timestamp.valueOf(locDateTime);
}

正在以一种新的方式(例如时间戳记)存储日期,因此请确定您是想进一步使用tinyblob还是将新方法与时间戳记一起使用。