對數據庫的操作CRUD:C:create創建 R:retrieve查詢 U:updata更新 D:delete刪除
使用SQLiteOpenHelper
的getReadableDatabase()
或getWritableDatabase()
方法是可以直接用于創建和升級數據庫的,同時還會返回一個SQLiteDatabase
對象,借助這個對象就可以對數據庫進行CRUD操作
添加數據
SQLiteDatabase
對象中有一個insert (String table, String nullColumnHack, ContentValues values)
方法,這個方法就是用來專門添加數據的
- table:數據庫表名
- nullColumnHack:用于在未指定添加數據的情況下給某些可為空的列自動賦值為null,一般用不到這個功能,直接傳入
null
即可 - values:是一個
ContentValues
對象,它提供一系列的put()
方法重載,用于向ContentValues
中添加數據,只需要將表中的每個列名以及相應的待傳入的數據傳入即可
添加數據,代碼如下:
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//組裝第一條數據
values.put("name", "The Da Vinci Code");
values.put("author", "Dan Brown");
values.put("pages", 454);
values.put("price", 16.96);
//插入數據
db.insert("Book", null, values);
//將ContentValues對象中存儲的數據清空
values.clear();
values.put("name", "The Lost Symbol");
values.put("author", "Dan Brown");
values.put("pages", 510);
values.put("price", 19.95);
db.insert("Book", null, values);
使用adb shell命令來查詢數據庫表中插入的數據:
插入數據
更新數據:
SQLiteDatabase
對象中有個一update(String table, ContentValues values, String whereClause, String[] whereArgs)
方法,專門用來更新數據
- table:數據庫表名
- values:ContentValues對象,要把更新的數據在這里組裝進去
- whereClause:對應的是SQL語句的where部分,使用占位符?
- whereArgs:提供一個字符串數組為第三個參數中的每一個占位符指定相應的內容
更新數據,代碼如下:
//得到數據庫對象
SQLiteDatabase db = dbHelper.getWritableDatabase();
//創建ContentValues對象
ContentValues values = new ContentValues();
//組裝需要跟新的數據
values.put("price", 10.99);
//調用update方法,實現數據的更新
db.update("Book", values, "name = ?", new String[]{"The Da Vinci Code"});
查詢更新后的數據:
更新數據
刪除數據
SQLiteDatabase
對象中有一個delete(String table, String whereClause, String[] whereArgs)
方法,專門用來刪除數據
- table:數據庫表名
- whereClause:使用占位符?
- whereArgs:給出占位符的值
第二個和第三個參數是用于約束刪除某一行或者某幾行的數據,不指定的話默認就是刪除所有行
刪除數據,代碼如下:
SQLiteDatabase db = dbHelper.getWritableDatabase();
//指定delete方法
db.delete("Book", "pages > ?", new String[]{"500"});
查詢刪除后的數據:
刪除數據
查詢數據
SQLiteDatabase
對象中有多個重載的query()
方法,使用一個最簡單的方法(七個參數):
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
- table:表名
- columns:指定查詢的列,不指定則默認查詢所有列
- selection:使用占位符?,給出查詢條件
- selectionArgs:selection中占位符的值
- groupBy:分組
- having:對分組的結果進行過濾
- orderBy:排序
此方法放回的是一個Cursor對象,查詢的所有數據都將從這個對象中取出
取出數據,代碼如下:
//拿到數據庫對象
SQLiteDatabase db = dbHelper.getReadableDatabase();
//查詢Book表中的所有數據
Cursor cursor = db.query("Book", null, null, null, null, null, null);
//遍歷Cursor對象,指針位移,判斷是否有下一個元素
while (cursor.moveToNext()) {
//根據列名找到序號,根據序號再查找出來數據
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("MainActivity", name + " " + author + " " + pages + " " + price);
}