SQLite是一款轻量级的关系型数据库,它运算速度快,占用资源少
SQLiteDatabase mySql;
删除操作:
String whereClause:零表示删除所有的行,有值时表示通过什么字段来删除,比如通过id删除
String[] whereArgs :绑定值给whereClause里面有占位符“?”,比如whereClause写的是”id=?”,whereArgs存入的是1,表示删除table里面id=1的这一行
返回:影响的行数。
如:
mySql.delete("tb_user","id=?" , new String[]{"1","5"});表示删除tb_user表里面id=1和id=5的数据
mySql.delete("tb_user","id=" + id, null);表示删除tb_user表里面id=1的数据,这种情况只能删除一条数据,如果只删除一条数据,这种拼接的方式更便捷。
插入操作:
String nullColumnHack :指定空值的字段的名称,当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。
ContentValues values:存放要添加的数据,ContentValues类似于MAP,(它提供了存取数据对应的put(String key,Xxx value)和getAsXxx(String key)方法, key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等),不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,
如果 ① values有值并且个数大于0,nullColumnHack可以为null,
② values为空,nullColumnHack必须添加一条除主键之外其他字段值(让改字段内容为null)。
1. SQLiteDatabase db = databaseHelper.getWritableDatabase();
2. ContentValues values = new ContentValues();
3. values.put("name", "测试数据");
4. values.put("age", 4);
5. long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关
返回:新插入一行的行ID,或者发生错误的时候返回-1。
查询操作:
Stringsql:sql语句;
String[]selectionArgs:sql语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。
如:Cursor cursor = db.rawQuery("select name from tb_user where id=?", new String[]{"1"});表示查询tb_user表里面id=1的数据
返回:游标,通过游标取出数据,
if (cursor.moveToFirst()){
user= buildUser(cursor);
}
cursor.close();
String[]columns:想要显示的列,若为null则返回所有列,
Stringselection:where子句,声明要返回的行的要求,如果为空则返回表的所有行
String selection:where子句,声明要返回的行的要求,如果为空则返回表的所有行,比如通过id查询,where写的就是”id=?”
String[]selectionArgs: where子句对应的条件值
StringgroupBy: 分组方式,若为空则不分组.
StringorderBy:排序方式,为空则为默认排序方式
如:Cursor cursor = query("user", new String[] { "username","password" },"username=?", "a",null,null, null, null);表示:查询user表里面的内容,显示username=a的用户的username和password两个条件(其余内容都不显示,只差每条数据中的两行),不分组按默认方式排序。如何username=a的用户有很多,那么查出来的就不是一条,所以有排序方式和分组这些参数。
rawQuery和query的区别:
Cursor cursor = db.rawQuery("select name from *** where id=?", new String[]{"1"});
Cursor cursor = db.query("***", new String[]{"name"}, "id=?", new String[]{"1"}, null, null, null);
query() 做的一件事就是帮你拼写 SQL 语句,而调用 rawQuery() 是你自己拼写好语句
更新操作:
ContentValues values:你需要更新的数据组成的一个ContentValues对象里面(上面插入操作的时候详细解释了)
String whereClause:更新的条件,为一个字符串。如果为null,则所有行都将更新;
String[] whereArgs:字符串数组,和whereClause配合使用。有两种用法,如果whereClause的条件已经直接给出,如“class = “ + num,num是传入的参数,则whereArgs可设为null。如果是”class= ?“,则?会被whereArgs这个数组中对应的值替换,whereArgs给出?代表的值,有多个?的,字符串数组里的值依次填入。