Java 您可以在Android Studio的SQLite中创建自己的枚举类型吗?

Java 您可以在Android Studio的SQLite中创建自己的枚举类型吗?,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,您好,我正在使用Java在Android Studio上进行一个餐厅管理项目,由于我有6种类别,我想在我的数据库表中按特定类型对它们进行分组,就像我们在MySQL Enum类型中所做的那样,当然以后可以访问它们。 这是我在Java上的表代码,我正在使用SQLite作为数据库: public static final String CREATE_RESTAURANT_TABLE_ = "CREATE TABLE " + RESTAURANT_TABLE

您好,我正在使用Java在Android Studio上进行一个餐厅管理项目,由于我有6种类别,我想在我的
数据库表
中按特定类型对它们进行分组,就像我们在
MySQL Enum
类型中所做的那样,当然以后可以访问它们。
这是我在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 );";

SQLite中没有
ENUM
数据类型,但即使有,也不是定义此列的最佳方式。
如果要添加新类别,该怎么办?您必须在表的定义中重新定义枚举值,而这在SQLite中是不可能的,除非您重新创建表(如您所见)。

在这种情况下,正确的设计是创建一个表
categories
,如:

CREATE TABLE categories(id INTEGER PRIMARY KEY, category TEXT);
并将所有类别存储在此处:

INSERT INTO categories(category) VALUES 
  ('category1'),   ('category2'), ....,   ('categoryn');
并在您的
RESTAURANT\u表中定义一列,该列引用
类别的
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
类中,必须通过覆盖
onconfig()
来启用外键约束,如下所示:

@Override
public void onConfigure(SQLiteDatabase db) {
    db.setForeignKeyConstraintsEnabled(true);
}
现在,在餐馆表的
id\u category
列中,您将存储id,这些id是对
categories
表中的类别的引用。
您可以在
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