sqlite中的replace、insert、update之前的區別

來源:互聯網
上載者:User

標籤:

本文轉自http://www.ithao123.cn/content-933827.html,在此感謝作者

 

 

android資料庫操作,有兩種方式,一種用android提供給我們的資料庫操作函數insert、update、replace,我用到的就是這三種。另外一種方式就是利用資料庫語言進行操作,也就是利用execSQL這個函數後面帶sqlite資料庫操作語言進行操作,sqlite中的sql語言和標準的sql語言大同小異,但是你如果是想有針對性的瞭解,建議你買一本書《SQLite權威指南》,這本書是sqlite官方網站推薦的,我買的是中文版的,噹噹上就有的賣。

這裡主要講的幾個容易混淆的點:

第一:android給我們的replace函數,這個函數其實相當於sql語言中的insert or update,大致是這個意思,意思是假如表中你定義的唯一的欄位,比如_id=1,是主鍵!你利用contentvalues傳入的參數中,假如_id為1的欄位是表中存在的,那麼就不會重建一條記錄,而是Update當前行,當然,這個和update有很大的區別,replace會完全把所有資訊給抹掉,然後根據你給出的約束條件,比如:預設值等之類的資訊,重建一條欄位。反之,不存在你給定的_id欄位,那麼會產生一條新的_id=1的欄位。

第二:android給定的update函數,如果你使用的update函數,假如,你update_id=1的欄位,如果表中不存在_id=1的欄位,那麼是會報錯的。而你用sqlite語句執行同樣的操作,update同樣的欄位,假如不存在_id=1的欄位,它不會執行任何操作,也不會報錯。這是他們的區別。

第三:衝突解決,這一塊比較複雜,本人也沒有搞的十分清楚。你可以在表裡定義衝突解決,也可以在欄位上定義衝突解決。首先,你用android給出的函數,是不能完成衝突解決的,也有可能是我沒有發現這樣功能的函數?我們通常用sql語句,insert or ignore這樣的形式來實現sql語句的衝突解決。但是sql語句的衝突解決貌似沒有欄位級的衝突解決好用。我們來講一下欄位層級的衝突解決,比如,你想實現一個這樣的功能:你要在一張表裡面插入記錄,你想新插入表裡_id值不存在的欄位,但是又不想破壞掉_id已經存在的任何資訊,那麼你可以在_id欄位設定唯一,並且在唯一的基礎上設定衝突解決為ignore,這樣,既插入了你想要插入的資料,也原封不動的保留了那些你不想破壞的資料。其他的衝突解決,fail是當約束違反發生時,sqlite命令立馬終止,報錯!但是不恢複約束違反之前已經修改的記錄,這樣很不好,所以不推薦使用。replace這個很好理解,當違反唯一約束的時候,sqlite將造成這種違反的記錄刪除,也就是刪除原來的記錄,插入新的記錄,經過調試,replace並不儲存原來的記錄的任何資訊。abort,當約束違反發生時,sqlite恢複命令所做的所有改變並且終止命令。這是sqlite的預設衝突解決方案,也是sql標準定義的行為。最後一個是rollback,很好理解,當違反約束的動作發生時,終止當前命令和整個事物,當前事務和命令所做的任何操作和改變都將被復原!

這樣,你可以用insert配合欄位層級的ignore可以完成條件針對_id或者其他欄位的update操作,彌補了android的update報錯,和sql語句中update操作針對_id不存在的欄位不添加的缺陷。

sqlite中的replace、insert、update之前的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.