【问题标题】:How do you insert into an sqlite table with foreign key [closed]你如何插入到带有外键的sqlite表中[关闭]
【发布时间】:2020-11-27 18:15:46
【问题描述】:

您好,我需要有关 sqlite/Qt 问题的帮助。该表的架构是

CREATE TABLE PROJECT (
"pro_id" INTEGER NOT NULL DEFAULT 1,
"app_id" INTEGER NOT NULL DEFAULT 3,
"Start" TEXT NOT NULL,
"End" TEXT NOT NULL, 
"Output" INTEGER NOT NULL,
"Log Type" INTEGER NOT NULL, 
"Errors" INTEGER NOT NULL, 
"Success" INTEGER NOT NULL, 
"NOTES" VARCHAR NOT NULL DEFAULT '',
"Duration" TEXT NOT NULL DEFAULT '00.00.00.000',
PRIMARY KEY("app_ID", "pro_ID", "Start"),
FOREIGN KEY ("Output") REFERENCES "OUTPUTS" ("ID") , 
FOREIGN KEY ("app_ID", "pro_ID") REFERENCES "PROJECTS"("A_ID", "P_ID"), 
FOREIGN KEY ("Log Type") REFERENCES "TYPE" ("ID"));

INSERT 查询(Qt 内部)是

temp = "INSERT INTO PROJECT (pro_id, app_ID, 
Start, End, Output, Log Type, Errors, Success, NOTES, Duration) 
VALUES(1,1, Date & time in quotes, Date & time in double quotes, '1, 1, 0, 0, '0.0.0.0.000')";

我得到的错误是:

QSqlError("1", "Unable to execute", "near \"Type \": syntax error")

我觉得问题出在 sqlite 方面,我一点也不熟悉。我是今年才开始的。我觉得外键是问题所在

【问题讨论】:

  • 在 INSERT 语句中,将 Log Type 括在反引号、方括号或双引号内。
  • 我发现了问题所在。数据是正确的,但由于某种原因,您用于 TEXT、VARCHAR 等的单引号必须插入到 query.exec() 中。我最初将单引号与他们的 QString 变量放在一起。 (例如 QString pro_ID = "'" + project->at(index)->project_name + "'";)我猜你应该总是将单引号直接放在 INSERT 语句中,而不是通过变量间接地。这不是我的专栏,尽管我确实更改了它们以确保它们不会造成问题。

标签: sqlite qt foreign-keys syntax-error sql-insert


【解决方案1】:

您可能应该启动 sqlite 并尝试一些事情。您的错误只是说它不知道由于空间的原因最有可能是什么“类型”。如果你将“日志类型”用引号括起来,你会得到别的东西。

但据我所知,您在该声明中还有其他错误。但我不知道您是否故意缩写“引号中的日期和时间”。还有一个单引号可能会丢失,等等。

所以假设这些值是 100% 正确的,插入带有外键的表只是确定该键存在于外键表中的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多