數據庫SQLite

數據庫SQLite是一種輕量級的關係型數據庫,與大型數據庫相比,它的體積小、零配置,能夠直接運行在應用程序中,很是設和嵌入式的操做系統。sql

Android中的SQLite:數據庫

SQLite的數據庫文件默認爲與/data/data/package-name/database目錄下設計模式

SQLiteOpenHelperapp

要建立一個靈活應用、便於維護的數據庫,首先要實現SPLiteOpenHelper的子類函數

數據庫最經典的四個操做:添加、刪除、修改、查找,在處理大量數據的時候使用數據庫能夠幫咱們迅速定位當前須要處理的數據,例如要實現一個搜索功能,用數據庫的話只須要其中一個搜索條件。一個數據庫語句就能夠迅速的在N條數據中找到咱們想要的數據。在Android的開發中使用的數據庫是SQLite,他是一個輕量級的數據庫,很是小,已執行好,效率高,可靠,陷入式設備由於受到硬件條件的限制因此ufeichangshiheshiyongSQLite數據庫。工具

建立與刪除數據庫spa

封裝一個類去繼承SQLiteOpenHelper,在構造函數中傳入數據庫名稱與數據庫版本號,數據庫被建立的時候會調用onCreate(SQliteDatabase db)方法,數據庫版本號發生改變的時候會調用onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法,能夠方便的對軟件升級後做出相應處理避免覆蓋安裝數據庫發生改變產省的錯誤。調用SQLiteOpenHelper的getReadableDatabase()方法去建立數據庫,若是數據庫不存在則建立並返回SQLiteDatabase對象,若是數據庫存在則不建立只返回SQLiteDatabase對象。調用deleteDatabase(DATEVASE_NAME)方法,傳入數據庫名稱及能夠刪除數據庫操作系統

封裝了一個DatabaseHelper類繼承SQLiteOpenHer,使用單例模式來處理這個類,單例模式是常見的代碼設計模式之一,它的好處是避免在內存中的頻繁的實例化因此將他的對象寫成static靜態,這樣他的對象就只有一份存在靜態內存區,使用的時候只須要經過getInstance()就能夠直接拿到這個靜態對象。設計

 1、SqliteDataBase類指針

Android提供了一個名爲SQLiteDatabase的類,該類封裝了一些操做數據庫的API。一旦應用程序得到了表明指定數據庫的SqliteDatabase對象,接下來就可經過SqliteDatabase對象來管理、操做數據庫了。

1.1建立數據庫和表

1.1.1建立數據庫,並得到SqliteDataBase對象。調用SqliteDataBase類的靜態方法,能夠得到一個數據庫對象。

SqliteDataBase.db = SQLiteDataBase.openOrCreateDatabase(path,factory);//打開或建立(不存在則建立)

注意:1.若是指定的數據文件存在則打開,不存在則建立。

         2.參數而是指的CursorFactory,傳入null則表明使用默認的CursorFactory,通常傳入null足夠。

1.1.2使用sql語句操做SQLite數據庫。建表、數據的CRUD等操做。

注意:SQliteDataBase的execSQL()方法能夠執行任意的SQL語句,包括帶佔位符的SQL語句。可是該方法沒有返回值,因此通常只用於執行DDL或DML語句,執行查詢語句,則調用SQLiteDataBase的rawQuery()方法。

1.2關於Cursor

    當執行查詢語句的時候,返回值是一個Cursor對象,這裏的Cursor相似於JDBC中的ResultSet。Cursor也提供了一些方法來移動查詢結果的記錄指針。

1.2.1move(int offset)將指針向上或向下移動指定的行數。offset是證書就是向下,負數就是向上

1.2.2moveToFirst()喲東道第一行,成功則返回true

1.2.3moveToLast()

1.2.4moveToNext()

1.2.5moveToPosition(position)移動到指定的行

1.2.6moveToPrevious()向上移動一行

1.2.7一旦將記錄指針移動到指定的行後,接下來就尅調用Cusor對象的getXxx()方法來得到該行記錄的數據了。

1.三、關於事務

SQLiteDatabase中包含以下兩個方法來控制事務:

beginTransaction() 開始事務

endTransaction()   結束事務

inTransaction() 若是當前上下文處於事務中,則返回true

關於事務的提交仍是回滾:

在結束事務以前調用setTransactionSuccessful()方法,則當調用結束事務的時候是事務提交。不然事務回滾。

1.4特定方法操做SQLite數據庫

若是不動用sql語句,可使用Android提供的專有API操做數據庫:insert、update、delete和query方法

insert(table, nullColumHack, values)

updatetablevalueswhereClausewhereArgs

delete()

query();

2、SQLiteOpenHelper類(建華或的數據庫對象的方式)

直接使用SQLiteDataBase進行數據的建立比較麻煩,Android專門提供了SqliteOpenHelper來建立數據庫。

 SqliteOpenHelper是一個管理數據庫的工具類,用於管理數據庫的建立和版本更新。

2.1SQLiteOpenHelper類的構造方法

 

能夠經過繼承這個類,實現它的一些方法來對數據庫進行一些操做。
全部繼承了這個類的類都必須實現下面這樣的一個構造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
第一個參數:Context類型,上下文對象。
第二個參數:String類型,數據庫的名稱
第三個參數:CursorFactory類型
第四個參數:int類型,數據庫版本

注意:1.數據名稱只須要寫數據庫名就能夠,會自動把數據庫存到app的目錄選

           2.CursorFactory通常使用null便可。

2.2SQLiteOpenHelper類的方法

2.2.1 getReadableDatabase()建立或者打開一個可讀寫的數據庫,若是出現問題(磁盤滿等),則打開一個只讀的數據庫。

2.2.2getWritableDatabase()得到一個可讀寫的數據庫。若是磁盤滿則會拋出異常。

2.2.3onCreate(SQLiteDataBase db)只有第一次建立這個數據庫的時候調用。通常在這個方法中建立數據的相應表。

2.2.4onOpen(SQLiteDatabase db)當每次打開數據庫的時候都會調用。這個方法不多使用

2.2.5onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 當升級數據庫的時候調用

2.2.6close()   關閉打開的全部數據庫對象

3、讀取數據與ListView結合使用

3.1 把Cursor數據轉換成List集合

 

Cursor中的數據轉換成List集合,而後作Adapter的數據源,來讓ListView展現

3.2使用CursorAdapter

構造方法:

 

public CursorAdapter ( Context context, Cursor c, int flags)

 

context

應用程序上下文

c

用於取得數據的遊標

flags

用於決定適配器行爲的標誌位.能夠是 FLAG_AUTO_REQUERY 和 FLAG_REGISTER_CONTENT_OBSERVER 的任意組合. 

CursorAdapter繼承自BaseAdapter

通常實現腹瀉以下兩個方法就能夠了:

View newView(Context context,Cursor cursor,ViewGroup parent)

爲遊標指向的數據建立新視圖

bindView(View view,Context context,Cursor cursor)

綁定遊標指向的數據到傳入的view視圖中

當數據庫中的數據發生變化時:能夠調用adapterchangeCursor(newCursor)來更新數據顯示,此方法會更新新的Cursor,並關閉舊的Cursor。   不須要另外調用Adapternotifdataset.

相關文章
相關標籤/搜索