SQLite搞清楚违反了哪个约束

时间:2013-11-14 13:45:34

标签: c++ c sqlite

假设我有一个像这样声明的表:

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))检查错误。这只会告诉我何时发生约束违规。

1 个答案:

答案 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