如何使用SQLite

來源:互聯網
上載者:User

前些時候看到興趣小組裡有人問“Android上SQLite的最佳實務”是什麼,好奇地搜了一下,確實沒有一個好一點的指導文檔,平時的使用也只是簡單的拷貝code,並沒有深入的研究過。以下是我看到的Kevin關於其使用的心得,原文的大體的意思是:

Android例子涵蓋了一些Sqlite的基本用法,但它們並沒有深入地給出合理的使用方法,更重要的是,不合理的使用方法。大多數例子和文檔只是涉及最基本的資料庫查詢,或者教你如何建立一個ContentProvider。從來不提及的地方像:

        ·         什麼地方建立和儲存SQLiteOpenHelper執行個體?

        ·         可以有多少個執行個體?

        ·         多線程同時訪問資料庫有沒有什麼要擔心的?

基本的內容是,你可以任意次數地串連Sqlite資料庫,而且Android系統也支援你這樣做。Sqlite擁有檔案層級的鎖,用來同步訪問和防止錯誤。如果你只知道這些,那麼,將會給你帶來很大的痛苦。開源的一個好處是,你可以深入代碼一探究竟。從代碼和一些測試中,我瞭解到以下事實:

        ·         Sqlite擁有檔案層級的鎖。許多線程可以同時讀,但只有一個可以寫。鎖阻止多個同時寫入。

        ·         Android在SQLiteDatabase中實現了一些java鎖來確保動作是同步進行。

        ·         如果你用多個線程瘋狂地訪問資料庫,你的資料庫不會(或不應該)崩潰。

沒提到的是,如果你通過多個不同的真實串連同時寫資料庫,其中的某個會失敗,它不會等到前一個完成後繼續寫入。簡單地,不會寫入你的改變,更糟糕的是,你也得不到一個異常,只是在LogCat中輸出一些message,僅此而已。

SQLiteOpenHelper類做了一些有趣的事。儘管它有方法可以獲得一個唯讀串連和可讀寫的串連,但實質上它們是同一個串連。假設沒有檔案寫錯誤的話,唯讀串連實質上就是一個可讀寫的串連。有趣吧。因此,如果你的app中使用一個helper的話,即便從多線程中使用,你也從未使用多個串連。

同樣,一個helper中只有一個SQLiteDatabase的執行個體,這個執行個體中實現了一些java鎖。因此,當你正在執行資料庫的操作時,其它db的操作都將鎖定。即便是你使用多個線程來做這些事以便最佳化資料庫的效能,壞訊息,沒有什麼用。

按照我的認識,SQLite工作的方式,基本上不可能會破壞你的資料庫,除非代碼裡有bug或者有硬體問題。

因此,我推薦這樣使用:建立一個SQLiteOpenHelper靜態對象。什麼時候去close它呢?不需要。當app關閉,它會自動釋放檔案引用。

但是,會不會有“close() was never explicitly called on database”異常呢?

如果你注意的話,當串連掛在那裡的時候,你沒有得到那個異常。你只是在串連已經建立,而你又嘗試開啟另一個時才會有異常。因此,你只需要開啟一次串連。

像這樣來使用:

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

{

    private static DatabaseHelper instance;

 

    public static synchronized DatabaseHelper getHelper(Context context)

    {

        if (instance == null)

            instance = new DatabaseHelper(context);

 

        return instance;

    }

//Other stuff... 

}

 

就這些。。。

原文地址:

http://www.touchlab.co/blog/android-sqlite-locking/

http://www.touchlab.co/blog/single-sqlite-connection/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.