2015-04-06 41 views
4

SQLite的有這個"feature"而即使當您創建INTEGER類型或REAL的列,它允許你插入一個字符串到它,即使一個字符串沒有在它的數字,像「快狐狸跳過了懶狗」如何避免在SQLite表中插入錯誤的數據類型?

你如何防止這種插入發生在你的項目中?

我的意思是,當我的代碼有導致這種插入或更新的錯誤時,我希望程序給出一個錯誤,所以我可以調試它,而不是簡單地在我的數據庫中無聲地插入垃圾。

回答

6

您可以在此使用CHECK約束(見previous answer here)執行。這看起來像

CREATE TABLE T (
     N INTEGER CHECK(TYPEOF(N) = 'integer'), 
     Str TEXT CHECK(TYPEOF(Str) = 'text'), 
     Dt DATETIME CHECK(JULIANDAY(Dt) IS NOT NULL) 
    ); 
1

更好的和更安全的方式是編寫驗證用戶輸入的功能(ISNUMERIC,isString等)...