Android SQLiteDatabase分析

來源:互聯網
上載者:User

標籤:儲存   儲存   ogr   調用   通訊   cti   get   一個   ase   

Android中的資料存放區使用的小巧的SQLite資料庫。

為了方便java層使用SQLite,android做了大量的封裝。提供了一些列的類和API。本文章就揭露這些封裝背後的類圖關係。

老規矩,首先:


SQLiteOpenHelper是Android SDK所提供的一個協助類,通過此類來管理資料庫的建立和版本號碼控制。

通過SQLiteOpenHelper函數getReadableDatabase和函數getWritableDatabase能夠得到一個SQLiteDatabase對象。使用者通過繼承SQLiteOpenHelper類,實現其抽象函數,以實現資料庫表格的建立,版本號碼的升級等功能。

從UML途中能夠看到SQLiteDatabase中有一個成員變數指向DatabaseErrorHandler介面。這個對象用來處理資料庫發生異常的case。我們能夠實現這個介面來處理資料的異常case,比方資料庫損壞打不開,就會調用到這個介面的onCorruption函數。


SQLiteDatabase提供了對資料庫的一些操作函數。比方query。insert,delete等。這裡僅僅說一種case:query。途中綠色的線條代表著query的調用流程走向。

通過SQLiteDatabse的query函數,能夠得到一個SQLiteCursor對象。它實現了Cursor介面。

SQLiteCursor代表著查詢資料庫後的結果集。假設是本進程內調用SQLiteDatabse,那麼得到Cursor介面實際上是SQLiteCursor對象,假設是跨進程,比方通過ContentProvider的query介面查詢一個Uri得帶一個Curosr介面,那麼實際的對象將是一個支援跨進程通訊的Cursor對象。這裡就不做具體的描寫敘述了,在以後的文章中再單獨解說Cursor的結構體系。

SQLiteDatabse的一個特色是對多線程的訪問做了封裝。

每一個線程都有儲存著一個session,用來和資料庫通訊。而實際的通訊過程是seesion從connect pool中得到一個SQLiteConnection串連,通過這個串連來操作native層真正的資料庫。每次操作資料庫的時候都必須得到一個串連。

SQLiteConnectionPool控制了串連的類型。對於WAL模式的資料庫,僅僅能有一個可寫的串連,能夠有多個讀的串連。這樣讀和寫就能夠同一時候進行了。當一個可寫的串連已經被佔用了。假設此時有線程申請寫的串連,那麼這個線程會進入等待隊列,直到有可利用的寫串連為止。對於journal mode的資料庫,4.2的代碼是僅僅同意有一個串連。

SQLiteProgram代表著一次對資料庫操作的各種資源。它裡面儲存著SQL語句。所操作的資料庫物件,以及SQL語句所綁定的參數。

Android SQLiteDatabase分析

聯繫我們

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