2

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

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

4

1 回答 1

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
于 2013-11-14T13:57:38.260 回答