假如我們沒有任何在Android上使用SQLite的經驗,現(xiàn)在要開始在工作中用SQLite存儲一些數據。OK, 我們去看google的官方培訓文檔吧,http://developer.android.com/training/basics/data-storage/databases.html
差不多有個5分鐘到15分鐘吧,這篇官方培訓文檔就看完了,然后就可以在應用中使用了,它提示的幾個Note我們也都注意到了,沒犯任何錯誤。這時候寫出來的代碼是什么下場呢?
首先是內存泄漏吧,教程沒有教用try...finally關Cursor的好習慣,甚至都沒提關Cursor這事兒。
其次crash肯定不少,教程里對于execSQL,getWritableDatabase這些容易出exception的語句,沒給要加try...catch的提示。
第三你會習慣用getColumnIndexOrThrow吧?會想到其實直接傳個常數進去就可以了么?
long itemId = cursor.getLong(cursor.getColumnIndexOrThrow(FeedEntry._ID));
第四,你能想到SQLite的特色功能自動解決沖突有個insertWithOnConflict方法可以調么?自己寫select多查一次性能受影響吧?insert出exception會影響性能吧?
第五,update和delete用ID的時候還用LIKE語句?SQLite的索引是不支持LIKE的,生怕能用上索引加快點速度么。。。
String selection =FeedEntry.COLUMN_NAME_ENTRY_ID +" LIKE ?";
看了很多講優(yōu)化的書和網上的文章,似乎針對于Android上的SQLite部分關注得都比較少. 下面我們就來共同探討一下這些問題.