Android開發11:SQLite數據庫

黎老師的視頻網上沒有了,不能看教學視頻了,找了個參加這個培訓的學員的博客看,學學。
參照http://www.blogjava.net/changcheng/archive/2010/03/01/314214.html

一、SQLite簡介

在Android平臺上,集成了一個嵌入式關係型數據庫—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮點數字)、TEXT(字符串文本)和BLOB(二進制對象)數據類型,雖然它支持的類型雖然只有五種,但實際上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等數據類型,只不過在運算或保存時會轉成對應的五種數據類型。 SQLite最大的特點是你可以保存任何類型的數據到任何字段中,無論這列聲明的數據類型是什麼。例如:可以在Integer字段中存放字符串,或者在布爾型字段中存放浮點數,或者在字符型字段中存放日期型值。 但有一種情況例外:定義爲INTEGER PRIMARY KEY的字段只能存儲64位整數, 當向這種字段中保存除整數以外的數據時,將會產生錯誤。另外, SQLite 在解析CREATE TABLE 語句時,會忽略 CREATE TABLE 語句中跟在字段名後面的數據類型信息。

二、SQLite的CURD

Android提供了一個名爲SQLiteDatabase的類,該類封裝了一些操作數據庫的API,使用該類可以完成對數據進行添加(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)操作(這些操作簡稱爲CRUD)。對SQLiteDatabase的學習,我們應該重點掌握execSQL()和rawQuery()方法。 execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行爲的SQL語句; rawQuery()方法可以執行select語句。SQLiteDatabase還專門提供了對應於添加、刪除、更新、查詢的操作方法: insert()、delete()、update()和query() 。這些方法實際上是給那些不太瞭解SQL語法的菜鳥使用的,對於熟悉SQL語法的程序員而言,直接使用execSQL()和rawQuery()方法執行SQL語句就能完成數據的添加、刪除、更新、查詢操作。

三、SQLite的事務管理

使用SQLiteDatabase的beginTransaction()方法可以開啓一個事務,程序執行到endTransaction() 方法時會檢查事務的標誌是否爲成功,如果爲成功則提交事務,否則回滾事務。當應用需要提交事務,必須在程序執行到endTransaction()方法之前使用setTransactionSuccessful() 方法設置事務的標誌爲成功,如果不調用setTransactionSuccessful() 方法,默認會回滾事務。

三、SQLite創建、更新數據表

如果應用使用到了SQLite數據庫,在用戶初次使用軟件時,需要創建應用使用到的數據庫表結構及添加一些初始化記錄,另外在軟件升級的時候,也需要對數據表結構進行更新。在Android系統,爲我們提供了一個名爲SQLiteOpenHelper的類,該類用於對數據庫版本進行管理,該類是一個抽象類,必須繼承它才能使用。爲了實現對數據庫版本進行管理,SQLiteOpenHelper類有兩種重要的方法,分別是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

當調用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用於操作數據庫的SQLiteDatabase實例的時候,如果數據庫不存在,Android系統會自動生成一個數據庫,接着調用onCreate()方法,onCreate()方法在初次生成數據庫時纔會被調用,在onCreate()方法裏可以生成數據庫表結構及添加一些應用使用到的初始化數據。onUpgrade()方法在數據庫的版本發生變化時會被調用,數據庫的版本是由程序員控制的,假設數據庫現在的版本是1,由於業務的需要,修改了數據庫表的結構,這時候就需要升級軟件,升級軟件時希望更新用戶手機裏的數據庫表結構,爲了實現這一目的,可以把原來的數據庫版本設置爲2(或其他數值),並且在onUpgrade()方法裏面實現表結構的更新。當軟件的版本升級次數比較多,這時在onUpgrade()方法裏面可以根據原版號和目標版本號進行判斷,然後作出相應的表結構及數據更新。

getWritableDatabase()和getReadableDatabase()方法都可以獲取一個用於操作數據庫的SQLiteDatabase實例。但getWritableDatabase() 方法以讀寫方式打開數據庫,一旦數據庫的磁盤空間滿了,數據庫就只能讀而不能寫,倘若使用的是getWritableDatabase() 方法就會出錯。getReadableDatabase()方法先以讀寫方式打開數據庫,如果數據庫的磁盤空間滿了,就會打開失敗,當打開失敗後會繼續嘗試以只讀方式打開數據庫。

示例程序

Contact.java

MySQLiteOpenHelper.java

ContactsService

ContactsServiceTest

main.xml

contactitem.xml

SQLiteActivity.java

運行有錯,沒解決
image

發佈了49 篇原創文章 · 獲贊 5 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章