2013-11-14 38 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