Android SQLite 數據庫詳細介紹 我們在編寫數據庫應用軟件時,需要考慮這樣的問題:因為我們開發的軟件可能會安裝在很多用戶的手機上,如果應用使用到了SQLite數據庫,我們必須在用戶初次使用軟件時創建出應用使用到的數據庫表結構及添加一些初始化記錄,另外在軟件升級的時候,也需要對數據表結構進行更新。那么,我們如何才能實現在用戶初次使用或升級軟件時自動在用戶的手機上創建出應用需要的數據庫表呢?總不能讓我們在每個需要安裝此軟件的手機上通過手工方式創建數據庫表吧?因為這種需求是每個數據庫應用都要面臨的,所以在Android系統,為我們提供了一個名為SQLiteOpenHelper的抽象類,必須繼承它才能使用,它是通過對數據庫版本進行管理來實現前面提出的需求。 下面我們來看一下Android SQLite 最常用的幾個類和那些方法: 一、SQLiteOpenHelper : onCreate(SQLiteDatabase db); 用於初次使用軟件時生成數據庫表。 當調用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用於操作數據庫的SQLiteDatabase實例的時候, 如果數據庫不存在,Android系統會自動生成一個數據庫,接着調用onCreate()方法,onCreate()方法在初次生成數據庫時才會被調用, 在onCreate()方法里可以生成數據庫表結構及添加一些應用使用到的初始化數據 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion); 在數據庫的版本發生變化時會被調用,一般在軟件升級時才需改變版本號 getWritableDatabase(); getReadableDatabase(); 兩方法都可以獲取一個用於操作數據庫的SQLiteDatabase實例。但getWritableDatabase() 方法以讀寫方式打開數據庫,一旦數據庫的磁盤空間滿了,數據庫就只能讀而不能寫,倘若使用getWritableDatabase()打開數據庫就會出錯。getReadableDatabase()方法先以讀寫方式打開數據庫,如果數據庫的磁盤空間滿了,就會打開失敗,當打開失敗后會繼續嘗試以只讀方式打開數據庫。 二、SQLiteDatabase: 1、db.insert(table, nullColumnHack, values) 第一個參數是表名稱,第二個參數是空列的默認值,第三個參數是ContentValues類型的一個封裝了列名稱和列值的Map; 2、db.delete(table, whereClause, whereArgs) 第一個參數是表名稱,第二個參數是刪除條件,第三個參數是刪除條件值數組 3、db.update(table, values, whereClause, whereArgs) 第一個參數是表名稱,第二個參數是更行列ContentValues類型的鍵值對(Map),第三個參數是更新條件(where字句),第四個參數是更新條件數組 4、db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)(下面有對該方法詳細講解) 5、db.execSQL(sql) // 執行任何SQL語句 6、db.rawQuery(sql, selectionArgs) 對第四個方法詳細講解: Cursor query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) 各個參數的意義說明: ①table:表名稱 ②columns:列名稱數組 ③selection:條件字句,相當於where ④selectionArgs:條件字句,參數數組 ⑤groupBy:分組列 ⑥having:分組條件 ⑦orderBy:排序列 ⑧limit:分頁查詢限制 三、Cursor: Cursor是一個游標接口,提供了遍歷查詢結果的方法,如移動指針方法move(),獲得列值方法getString()等. Cursor游標常用方法: getCount() 總記錄條數 isFirst() 判斷是否第一條記錄 isLast() 判斷是否最后一條記錄 moveToFirst() 移動到第一條記錄 moveToLast() 移動到最后一條記錄 move(int offset) 移動到指定記錄 moveToNext() 移動到下一條記錄 moveToPrevious() 移動到上一條記錄 getColumnIndexOrThrow(String columnName) 根據列名稱獲得列索引 getInt(int columnIndex) 獲得指定列索引的int類型值 getString(int columnIndex) 獲得指定列縮影的String類型值
