Android(9)——數據庫操作

Android

安卓開發者指南:https://developer.android.google.cn/guide

1 SQLite數據庫

SQLite是一個輕量級、零配置、可嵌入程序驅動的二進制文件,也是開源的關係型數據庫,實現自包容、零配置、支持事務的SQL數據庫引擎。特點是高度便攜、使用方便、結構緊湊、高效、可靠。

Sqlite的使用場景
現在的主流移動設備像Android、iPhone 等都使用SQLite作爲複雜數據的存儲引擎,在爲移動設備開發應用程序時,也許就要使用到SQLite來存儲大量的數據,所以就需要掌握移動設備上的SQLite開發技巧。對於Android平臺來說,系統內置了豐富的API來供開發人員操作SQLite,可以輕鬆的完成對數據的存取。

DDL(數據庫定義語言):create table 表名 (列名 數據類型 約束,…)
DML(數據庫操作語言):
insert into 表名(列1,列2) values (值1,值2)
insert into 表名 values(值1,值2,值3)
(插入:數據類型個數順序對應;一定要包含所有非空列;自動增長列的值設置不存在的值或null)
delete from 表名 [where 刪除條件]
update 表名 set 列名1=更新值1,列名2=更新值2,列名n=更新值n [where <更新條件>]
select * from 表名

1.1 Android中操作SQL語句

  1. 佈局文件
  2. 實現增刪改查點擊事件
    SQLiteOpenHelper抽象類
    Android平臺裏一個數據庫輔助類,用於創建或打開數據庫,並且對數據庫的創建和版本進行管理。回調方法onCreate()用於數據庫以及表的創建,onUpgrade()用於數據庫升級。


    性別單選按鈕的切換,設置默認值,private String genderStr = “男”;

    新增

    查詢所有:(stuList是一個ListView控件)

    條件查詢

    數據庫設置ID列名爲_id原因:SimpleCursorAdapter定義初期要求數據源(第三個參數)裏面有_id列。
    刪除

    修改(操作完記得把輸入框清空):

    每次操作完應該添加一個人性化的操作提示,例如:Toast.makeText(this,“添加成功”,Toast.LENGTH_SHORT).show();

Sqlite數據庫中獲取數據庫對象的兩個方法

1)獲取數據庫實例時使用了 getWritableDatabase()方法。
2)在getReadableDatabase()方法中,首先判斷是否已存在數據庫實例並且是打開狀態,如果是,則直接返回該實例,否則試圖獲取一個可讀寫模式的數據庫實例,如果遇到磁盤空間已滿等情況獲取失敗的話,再以只讀模式打開數據庫,獲取數據庫實例並返回,然後爲數據庫對象賦值爲最新打開的數據庫實例。
3) getReadableDatabase()一般都會返回和getWritableDatabase()一樣的數據庫實例,所以我們在DBManager構造方法中使用getWritableDatabase()獲取整個應用所使用的數據庫實例是可行的。
4)當調用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用於操作數據庫的SQLiteDatabase實例的時候,如果數據庫不存在,Android系統會自動生成一個數據庫,接着調用onCreate()方法。
5) onCreate()方法在初次生成數據庫時纔會被調用在onCreate()方法裏可以生成數據庫表結構及添加一些應用使用到的初始化數據。
6)onUpgrade()方法在數據庫的版本發生變化時會被調用,一般在軟件升級時才需改變版本號,而數據庫的版本是由程序員控制的。

1.2 SQLiteDatabase操作數據庫

用於管理和操作SQLite數據庫,幾乎所有的數據庫操作,最終都將由這個類完成。

在Android平臺上,SQLiteDatabase類下提供了兩套方法操作數據:

  1. 方法一:需要正確的SQL語句
    rawQuery():查詢
    execSQL():添加、刪除、修改、創建
  2. 方法二:使用API封裝方法,都不需要寫sql語句,根據參數操作數據庫:
    查詢:db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)
    添加:db.insert(table, nullColumnHack, values)
    刪除:db.delete(table, whereClause, whereArgs):返回long型數據,表示受影響行數
    修改:db.update(table, values, whereClause, whereArgs):返回long型數據,表示受影響行數

select count(*),age from info_tb group by age having age>23 order by age desc(降序)


1.3 使用面向對象思想封裝操作

Student學生實體類:int id, String name, int age, String gender,無參/有參構造
Dao:data access object數據訪問對象,對數據庫的操作對象
StudentDao.java




最後在Activity中調用這個類的方法就可以了

2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章