对数据库的操作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);
}