【问题标题】:enum to be stored in DB要存储在数据库中的枚举
【发布时间】:2023-03-07 05:23:01
【问题描述】:

我有一个这样的枚举类 -

public enum FeedbackStatus {
    @JsonProperty("unprocessed")
    UNPROCESSED("unprocessed"),

    @JsonProperty("arrived")
    ARRIVED("arrived"),

    @JsonProperty("performed")
    PERFORMED("performed"),

    @JsonProperty("cancelled")
    CANCELLED("cancelled"),

    @JsonProperty("removed")
    REMOVED("removed"),

    @JsonProperty("no-show")
    NO_SHOW("no-show"),

    @JsonProperty("cancel-at-door")
    CANCEL_AT_DOOR("cancel-at-door");

    private static final FeedbackStatus[] myEnumValues = FeedbackStatus.values();
    private final String fieldDescription;

    private FeedbackStatus(String value) {
        this.fieldDescription = value;
    }

    public static FeedbackStatus fromString(String string) {
        if (!TextUtils.isEmpty(string)) {
            for (FeedbackStatus feedbackStatus : myEnumValues) {
                if (feedbackStatus.getString().equalsIgnoreCase(string)) {
                    return feedbackStatus;
                }
            }
        }
        throw new IllegalArgumentException("No constant with text " + string + " found");
    }

    public String getString() {
        return this.fieldDescription;
    }
}

我需要使用 GreneDAO 在 SQLITE 数据库中存储一个对象feedback,但该对象是一个枚举,因此我无法存储它。对象就像 -

private FeedbackStatus feedback;

如何将其存储为字符串?

【问题讨论】:

    标签: java android database enums


    【解决方案1】:

    用于前。取消。值?什么时候存储数据?还有 ENUM.toString()。您可以将其存储为 String,然后使用 String to Enum 方法包装恢复数据。

    【讨论】:

      【解决方案2】:

      您不能将enums 存储在数据库中,因为enumnsJava 实体,因此对于枚举,您需要存储它们的等效值Stringint 等。

      您可以获得enum 中的value,如下所示,然后将其存储在database 中作为Strings

      String PERFORMED = PERFORMED.value; 
      String CANCELLED= CANCELLED.value; 
      String REMOVED= REMOVED.value; 
      String NO_SHOW= NO_SHOW.value; 
      String CANCEL_AT_DOOR= CANCEL_AT_DOOR.value;
      

      有关枚举的更多详细信息,请参阅Java Docs here

      所以实际上你的数据模型是好的,但是在数据库中保存枚举时,你只需要一列具有枚举值,并且在插入时你需要从枚举转换为它的字符串值,在从数据库中读取时,你需要构建来自该字符串的枚举。

      希望对你有帮助!!

      【讨论】:

      • 在我的例子中我该怎么做
      • 这是为了获取值。对于存储值,我应该像每个字符串 PERFORMED,CANCELLED.. 一样单独存储它吗?
      • 是的,但用于存储值?
      • 好的,所以在每个不同的列中保存 5 个字符串没有问题吗?
      • @shriduttkothari 既然序列化已经为您完成了这一切,您为什么还要重新发明轮子?
      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      相关资源
      最近更新 更多