要存储在DB

时间:2016-08-26 14:42:07

标签: java android database enums

我有一个像这样的枚举类 -

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;

如何将其存储为String?

3 个答案:

答案 0 :(得分:0)

用于前。 CANCELLED.value?存储数据时?还有ENUM.toString()。您可以将其存储为String,然后使用String将数据恢复到Enum方法。

答案 1 :(得分:0)

您无法将enums存储在数据库中,因为enumnsJava个实体,因此对于枚举,您需要将其等效值存储为Stringint等。

您可以获得value enum的{​​{1}},而不是将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

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

希望它有所帮助!!

答案 2 :(得分:0)