假设我有一个像这样声明的表:
CREATE TABLE IF NOT EXISTS articles(
id INTEGER PRIMARY KEY,
name_eng TEXT UNIQUE NOT NULL,
name_ger TEXT UNIQUE
);
我正在使用C / C ++ SQLite API。
在尝试输入新记录时发生约束违规时,如何确定导致违规的原因?目标是将正确的错误反馈传递给用户,而无需编写代码来检查输入的正确性。
修改:我目前正在使用sqlite3_errstr(sqlite3_errcode(db))
检查错误。这只会告诉我何时发生约束违规。
答案 0 :(得分:2)
sqlite3_errstr()
用英语描述错误代码,而sqlite3_errmsg()
描述错误本身。
使用sqlite3
客户端(使用sqlite3_errmsg()
)的示例:
sqlite> CREATE TABLE IF NOT EXISTS articles(
...> id INTEGER PRIMARY KEY,
...> name_eng TEXT UNIQUE NOT NULL,
...> name_ger TEXT UNIQUE
...> );
sqlite> insert into articles values(1,'a','b');
sqlite> insert into articles values(1,'a','b');
Error: PRIMARY KEY must be unique
sqlite> insert into articles values(2,'a','b');
Error: column name_ger is not unique
sqlite> insert into articles values(2,'a','a');
Error: column name_eng is not unique
sqlite> insert into articles values(2,null,'b');
Error: articles.name_eng may not be NULL
sqlite> insert into articles values(2,'b','b');
Error: column name_ger is not unique