Android SQLDatabase類中的insert方法nullColumnHack字段的含義

table 要插入數據的表的名稱

values:一個ContentValues對象,類似一個map.通過鍵值對的形式存儲值。

conflictAlgon:衝突解決方案。例如當數據表主鍵的唯一性檢測出錯的時候,就會按照該值設定的值進行處理。

nullColumnHack: 當values參數爲空或者裏面沒有內容的時候,我們insert是會失敗的(底層數據庫不允許插入一個空行),爲了防止這種情況,我們要在這裏指定一個 列名,到時候如果發現將要插入的行爲空行時,就會將你指定的這個列名的值設爲null,然後再向數據庫中插入。

 

(這 裏很多人會迷惑,nullColumnHack到底幹什麼用的,爲什麼會出現呢。當我們不設定一列的時候,不都是數據庫給設爲默認值嗎?很多字段設置默認 值也是null,這裏顯示的設置也是null,有什麼區別嗎,怎麼會顯示設置了之後就允許插入了呢?筆者爲了找到原因,我去查看了源代碼)

其實在底層,各種insert方法最後都回去調用insertWithOnConflict方法,這裏我們粘貼出該方法的部分實現.

這裏我們可以看到,當我們的ContentValues類型的數據initialValues爲null,或者size<=0時,就會再sql語句中 添加nullColumnHack的設置。我們可以想象一下,如果我們不添加nullColumnHack的話,那麼我們的sql語句最終的結果將會類似 insert into tableName()values();這顯然是不允許的。而如果我們添加上nullColumnHack呢,sql將會變成這樣,insert into tableName (nullColumnHack)values(null);這樣很顯然就是可以的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章