gpt4 book ai didi

java - Android 中的 SQLite : Foreign Keys and expected
转载 作者:行者123 更新时间:2023-11-29 05:06:22 30 4
gpt4 key购买 nike

我已经进行了搜索以试图了解这个问题的本质,但到目前为止还没有任何运气。

我正在制作一个 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 语法

  • 作为列定义的一部分

  • category INTEGER NOT NULL REFERENCES 类别 (id)

例如

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语法

  • 在定义列之后,但仍在列定义内,即仍在括号内。

  • FOREIGN KEY (category) REFERENCES categories (id)

例如

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-constrainttable-constraint的用途。


date 可以是列名。但是,我建议最好不要使用任何 SQLite 关键字(例如日期)作为列名。

关于java - Android 中的 SQLite : Foreign Keys and <table constraint> expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231353/

30 4 0