2013-11-14 37 views
2

假设我有一个表声明如下:的SQLite搞清楚这costraint被违反

CREATE TABLE IF NOT EXISTS articles(
id INTEGER PRIMARY KEY, 
name_eng TEXT UNIQUE NOT NULL, 
name_ger TEXT UNIQUE 
); 

我用C/C++ API SQLite的工作。

当试图输入新记录时发生约束违规时,如何才能找出导致违规的原因?目标是将正确的错误反馈转发给用户,而无需编写代码来检查输入的正确性。

编辑:我目前使用sqlite3_errstr(sqlite3_errcode(db))检查错误。这只会告诉我何时发生约束违规。

+0

你有看'sqlite3_errmsg()的输出'以下的错误? – mah

回答

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