你能在Android Studio中创建自己的SQLite枚举类型吗?

3

你好,我正在使用Java和Android Studio开发一个餐厅管理项目,由于我有6种不同的分类,我想在我的数据库表中按照特定的类型进行分组,就像我们在MySQL枚举类型中所做的一样,并且当然之后可以访问它们。
这是我的Java表格代码,我正在使用SQLite作为数据库:

public static final String CREATE_RESTAURANT_TABLE_ =
            "CREATE TABLE  " + RESTAURANT_TABLE + "(" +
                    ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                    NAME + " TEXT " +
                    CITY + " TEXT " +
                    CATEGORY + "TEXT" +
                    PHONE_NUMBER + "TEXT"  +
                    LAT + "TEXT" +
                    LON + " TEXT );";
1个回答

3
在SQLite中没有ENUM数据类型,即使有这种类型,也不是定义这个列的最佳方式。
如果您想添加一个新类别,您必须重新定义表定义中的枚举值。在SQLite中,除非您重新创建表,否则无法实现这一点(可以在这里找到)。
在这种情况下的正确设计是创建一个名为categories的表:
CREATE TABLE categories(id INTEGER PRIMARY KEY, category TEXT);

并将所有类别存储在那里:

INSERT INTO categories(category) VALUES 
  ('category1'),   ('category2'), ....,   ('categoryn');

在您的RESTAURANT_TABLE中定义一个列,它引用了categories中的id列:

public static final String ID_CATEGORY = "id_category";
public static final String CREATE_RESTAURANT_TABLE_ =
            "CREATE TABLE  " + RESTAURANT_TABLE + "(" +
                    ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                    NAME + " TEXT," +
                    CITY + " TEXT," +
                    ID_CATEGORY + " INTEGER REFERENCES categories(id)," +
                    PHONE_NUMBER + " TEXT,"  +
                    LAT + " TEXT," +
                    LON + " TEXT);";

在你的SQLiteOpenHelper类中,你必须通过覆盖 onConfigure() 方法启用外键约束,如下所示:
@Override
public void onConfigure(SQLiteDatabase db) {
    db.setForeignKeyConstraintsEnabled(true);
}

现在,在餐厅表的列id_category中,您将存储引用到categories表中的类别的ID。
您可以在categories中添加新的类别,没有任何问题。

当您查询餐厅表并想检索每行的类别时,您必须连接这两个表:

SELECT r.id, r.name, r.city, c.category, r.phone_number, r.lat, r.long
FROM restaurants AS r INNER JOIN categories AS c
ON c.id = r.id_category

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接