【问题标题】:There is some sytax issue with CREATE_TASKS_TABLE String [closed]CREATE_TASK TABLE String 存在一些语法问题[关闭]
【发布时间】:2014-06-27 13:56:04
【问题描述】:

此代码来自我的 DatabaseHelper 类 //这是两张表

private static final String TABLE_TASKS = "tasks";
private static final String TABLE_TASK_LIST = "task_list";

// 这些是表列名称

private static final String KEY_PK = "_id";
private static final String KEY_TITLE = "title";
private static final String KEY_DETAILS = "details";
private static final String KEY_NOTES = "notes";
private static final String KEY_FK_TASKLIST_ID = "fk_tasklist_id";

//这些是分配给 db.exeSQL 的字符串

private static final String CREATE_TASKS_TABLE = "CREATE TABLE "
+ TABLE_TASKS 
+ "(" 
+ KEY_PK
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_TITLE + " TEXT,"
+ KEY_DETAILS + " TEXT," + KEY_NOTES + " TEXT," 
+ " FOREIGN KEY ("+ KEY_FK_TASKLIST_ID + ")" 
+ "REFERENCES " 
+ TABLE_TASK_LIST + "("+ KEY_PK + ")" 
+ ")";
private static final String CREATE_TASK_LIST_TABLE = "CREATE TABLE "
+ TABLE_TASK_LIST + "(" + KEY_PK
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_TITLE + " TEXT" +    ")";
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TASKS_TABLE);// create task table
} catch (Exception e) {
Log.e("onCreate Error", "TASKS_TABLE not created");
}
try {
db.execSQL(CREATE_TASK_LIST_TABLE);// create task list table
} catch (Exception e) {
Log.e("onCreate Error", "TASK_LIST_TABLE not created");
}
}

当我尝试插入数据时,字符串导致问题,它说表任务没有名为 fk_tasklist_id 的列

【问题讨论】:

  • 那么您为什么不修复此代码以使用该表中的正确字段名称?我们无法帮助您,因为您没有告诉我们任何有关实际表结构的信息。
  • 我以为我已经提供了所有相关信息,CL 已经向我展示了问题。无论如何,谢谢马克

标签: android database sqlite foreign-keys


【解决方案1】:
CREATE TABLE tasks (
    _id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    details TEXT,
    notes TEXT,
    FOREIGN KEY (fk_tasklist_id) REFERENCES task_list(_id)
)

在这个表定义中,确实没有名为fk_tasklist_id的列。

要定义这样的列,请将其添加到列列表中:

CREATE TABLE tasks (
    _id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    details TEXT,
    notes TEXT,
    fk_tasklist_id INTEGER,
    FOREIGN KEY (fk_tasklist_id) REFERENCES task_list(_id)
)

或者,将 FK 约束放在此列上:

CREATE TABLE tasks (
    _id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    details TEXT,
    notes TEXT,
    fk_tasklist_id INTEGER REFERENCES task_list(_id)
)

【讨论】:

  • 谢谢 CL 我会试试的
  • 您的回答有所帮助,感谢它缺少列
猜你喜欢
  • 2012-05-14
  • 2015-04-15
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
相关资源
最近更新 更多