Android SQLite数据库之三,使用特定方法操作SQLite数据库

来源:互联网 发布:iphone7虚拟定位软件 编辑:程序博客网 时间:2024/05/22 15:02

Android的SQLiteDatabase提供了insert,update,delete和query语句来操作数据库,下面来简单的介绍一下这些方法的用法。

1.使用insert方法插入记录

SQLiteDatabase的insert方法的签名为long insert(String table, String nullColumnHack, ContentValues values),这个插入方法的参数说明如下。

》table:代表想插入数据的表名。

》nullColumnHack:代表强行插入null值的数据列的列明。当values参数为null或不包含任何key-value对时该参数有效。

》values:代表一行记录的数据。

insert方法插入的一行记录使用ContentValues存放,ContentValues类似于Map,它提供了put(String key, Xxx value)(其中key为数据列的列名)方法用于存放数据、getAsXxx(String key)方法用于取出数据。

例如如下语句:

ContentValues values = new ContentValues();

values.put("name", "孙悟空");

values.put("age", 500);

//返回新添加记录的行号,该行号是一个内部直,与主键ID无关,发生错误返回-1

long rowid = db.insert("person_inf", null, values);

不管第三个参数是否包含数据,执行insert()方法总会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值都为null的记录。

insert()方法的底层实际上依然是通过构造insert SQL语句来进行插入的,因此它生成的SQL语句总是形如下面的语句:

//ContentValues里key-value对的数量决定了下面的key-value对。

insert into <表名>(key1, key2, ...)

values(value1, value2...)

此时如果第三个参数为null或其中key-value对的数量为0,由于insert()方法还会按此方法生成一条insert语句,此时的insert语句为:

//ContentValues里key-value对的数量决定了下面的key-value对。

insert into <表名>()

values()

上面的SQL语句显然有问题。为了满足SQL语法的需要,insert语句必须给定一个列名,如:insert into person(name) values(null), 这个name列名就由第二个参数来制定。由此可见,当ContentValues为null或它包含的key-value对的数量为0时,第二个参数就会起作用了。

一般来说,第二个参数指定的列名不应该是主键列的列名,也不应该是非空列的列明,否则强行往这些数据列插入null会引发异常。


2.使用update方法更新记录

SQLiteDatabase的update方法的签名为update(String table, ContentValues values, String whereClause, String[] whereArgs),这个更新方法的参数说明如下。

》table:代表想更新数据的表名。

》values:代表想更新的数据。

》whereClause:满足该whereClause子句的记录将会被更新。

》whereArgs:用于为whereClause子句传入参数。

该方法返回受此update语句影响的记录的条数。

例如我们想更新person_inf表中所有主键大于20的人的人名,可调用如下方法:

ContentValues values = new ContentValues();

//存放更新后的人名

values.put("name", "新人名");

int result = db.update("person_inf", values, "_id>?", new Integer[]{20});

实际上update方法底层对应的sql语句如下:

update <table>

set key1=value1, key2=value2 ...

where <whereClause>

其中whereArgs参数用于向whereClause中传入参数。


3.使用delete方法删除记录

SQLiteDatabase的delete方法的签名为delete(String table, String whereClause, String[] whereArgs),这个删除的参数说明如下。

》table:代表想删除数据的表名。

》whereClause:满足该whereClause子句的记录将会被删除。

》whereArgs:用于为whereClause子句传入参数。

该方法返回受此delete语句影响的记录的条数。

例如我们想删除person_inf表中所有人名以“孙”开头的记录,可调用如下方法:

int result = db.delete("person_inf", "person_name like ?", new String[]{"孙_"});

实际上delete方法底层对应的SQL语句如下:

delete <table>

where <whereClause>


4.使用query方法查询记录

SQLiteDatabase的query方法的签名位Cursor query(boolean distinct, String table, String[] columns, String whereClause, String[] selectionArgs, String groupBy, String having, String orderBy, String limit),这个方法的参数说明如下:

》distinct:指定是否去除重复记录。

》table:执行查询数据的表名。

》columns:要查询出来的列名。相当于select语句select关键字后面的部分。

》whereClause:查询条件子句,相当于select语句where关键字后面的部分,在条件子句中允许使用占位符“?”。

》selectionArgs:用于为whereClause子句中占位符传入参数值,值在数组中的位置为占位符在语句中的位置必须一致,否则就会有异常。

》groupBy:用于控制分组。相当于select语句group by 关键字后面的部分。

》having:用于对分组进行过滤。相当于select语句having关键字后面的部分。

》orderBy:对于对记录进行排序。相当于select语句order by关键字后面的部分,如:personid desc, age asc。

》limit:用于进行分页,相当于select语句limit关键字后面的部分。例如5,10.

这个query()方法的用处,列举了一处:当应用程序需要进行“条件不确定”的查询(即查询条件需要动态改变的查询)时,使用这个query方法可以避免手动拼接sql语句。

例如想查询出person_inf表中人名为“孙”开头的记录,可使用如下语句:

Cursor cursor = db.query("person_inf", new String[]{"_id", "name", "age"}, "name like ?", new String[]{"孙?"}, null, null, "personid desc", "5,10");

//处理结果集

cursor.close();

上面就列举了insert,update,delete,query等SQLiteDatabase提供的对SQLite数据库进行操作的方法。



0 0
原创粉丝点击