我已经进行了搜索以试图了解这个问题的本质,但到目前为止还没有任何运气。
我正在制作一个 RPG 风格的待办事项列表来自学 Android/Java,我正在制作两个表格:类别(力量、智力等)和任务:名称、描述、EXP 等。
我希望每个任务都有一个类别,但我遇到了表约束错误。我的代码在下面,GitHub 链接是 here .
public void onCreate(SQLiteDatabase db){
setForeignKeyConstraintsEnabled(db);
db.execSQL("CREATE TABLE " + CATEGORY_TABLE_NAME + "(id INTEGER primary key autoincrement NOT NULL, name TEXT, exp INTEGER, level INTEGER )");
db.execSQL("CREATE TABLE " + QUEST_TABLE_NAME + "(id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL, FOREIGN KEY (category) REFERENCES categories (id), date TEXT");
db.execSQL("INSERT INTO " + CATEGORY_TABLE_NAME + "('name', 'exp', 'level') VALUES ('Strength', 0, 0 );");
db.execSQL("INSERT INTO " + CATEGORY_TABLE_NAME + "('name', 'exp', 'level') VALUES ('Stamina', 0, 0 );");
db.execSQL("INSERT INTO " + CATEGORY_TABLE_NAME + "('name', 'exp', 'level') VALUES ('Intelligence', 0, 0 );");
db.execSQL("INSERT INTO " + CATEGORY_TABLE_NAME + "('name', 'exp', 'level') VALUES ('Social', 0, 0 );");
db.execSQL("INSERT INTO " + QUEST_TABLE_NAME + "('name', 'description', 'expValue', 'category', 'date') VALUES ('Gym', 'Weightlifting down The Gym', '300', '1', '25/05/2017');");
}
错误出现在“日期 TEXT”,错误内容为:
<table constraint> expected, got 'date'.
这里有什么问题?
您的问题是您混淆了 column_constraint 语法和 table_constraint 语法(即在应该使用前者的地方编码后者).
您可以通过使用
来解决问题
db.execSQL("CREATE TABLE "+ QUEST_TABLE_NAME + "(id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL REFERENCES categories (id), 日期文本");
如下所述,替代语法也是如此。
即列约束语法以 REFERENCES ....
开头,并且是列定义的一部分(即列名是隐式的),而 table_constraint 语法以 FORIEGN KEY(column_name) REFERENCES ...
开头并遵循列定义
所以你可以有:-
Column_constraint 语法
例如
CREATE TABLE yourtablename (id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL REFERENCES categories (id), date TEXT)
或
Table_constraint语法
例如
CREATE TABLE yourtablename (id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL, date TEXT, FOREIGN KEY (category) REFERENCES categories (id));
您可能会发现 column-constraint和 table-constraint的用途。
date 可以是列名。但是,我建议最好不要使用任何 SQLite 关键字(例如日期)作为列名。
我是一名优秀的程序员,十分优秀!