您的位置:首页 > 移动开发 > Android开发

Android 中SQLite 增删改查的方法介绍

2016-03-08 16:04 615 查看
1、使用insert方法插入记录

<span style="font-size:14px;">  long insert(String table,           //代表想插入数据的表名

               String nullColumnHack, //代表强行插入null值的数据列的列名。当valus参数为

                                      //null或不包含任何key-value对时该参数有效。

ContentValues values)  //代表一行记录的数据
</span>
insert方法插入的一行记录使用ContentValues存放,ContentValues
 类似于Map,它提供了put(String key,Xxx value)

(其中key为数据列的列名)
 方法用于存入数据、getAsXxx(String key)方法用于取出数据。


例如如下语句:

<span style="font-size:14px;">ContentValues values = new ContentValues();

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

values.put("age", 500);
    //返回新添记录的行号,该行号是一个内部直,
//与主键id无关,发生错误返回-1

long rowid = db.insert("person_inf", null, values);</span>
不管第三个参数是否包含数据,执行insert()方法总会添加一条记录,

如果第三个
 参数为空,会添加一条除主键之外其他字段值都为null的记录.


insert()方法的底层实际上依然是通过构造insert SQL语句来进行插入的,


 因此它生成的SQL语句总是如下面的语句:


ContentValue里key-value对的数量决定了下面的

key-value对
 insert into <表名>(key1,key2···)
 values(value1,value2···)

2、使用update方法更新记录

<span style="font-size:14px;">update(String table,       //代表想更新数据的表名

      ContentValues values,//代表想更新的数据

      String whereClause,  //满足该whereClause子句的记录会被更新

      String[] whereArgs); //用于为whereClause子句传入参数</span>
该方法返回受此update语句影响的记录的条数

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

<span style="font-size:14px;">ContentValues values = new ContentValues();
//存放更新后的人名
values.put("name", "新人名");
int result = db.update("person_inf",values,"_id > ?",new Integer[]{20});</span>
实际上update方法底层对应的SQL语句如下:

<span style="font-size:14px;">update<table>

set key1=value1,key2=value2...

where <whereCluase></span>
其中whereArgs参数用于向whereClause中传入参数

3、使用delet方法删除记录

<span style="font-size:14px;"> delete(String table,      //代表想要删除的表名

        String whereClause,//满足whereClause子句的记录将会被删除

        String[] whereArgs)//用于为whereClause子句传入参数</span>
该方法返回受此delete语句影响的记录的条数

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

<span style="font-size:14px;"> int result = db.delete("person_inf","person_name like ?",new String[]{"孙_"});
</span>


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

delete<table> where <whereClause>

4、使用query方法查询记录

<span style="font-size:14px;">Cursor query(boolean distinct,     //指定是否去除重复记录

             String table,          //执行查询数据的表名

             String[] columns,      //要查询出来的列名,相当于select语句select关键字后面的部分

             String whereClause,    //查询条件子句,相当于select语句where关键字后面的部分,

                                   //在条件子句中允许使用占位符"?"

String[] selectionArgs,//用于为whereClause子句中占位符传入参数

                                   //值在数组中的位置与占位符在数组中的位置必须

//一致,否则就会有异常

String groupBy,        //用于控制分组。相当于select语句group by

//关键字后面的部分

String having,         //用于对分组进行过滤。相对于select语句

//having关键字后面的部分

String orderBy,        //用于对记录进行.相对于select语句

//order by关键字后面的部分。

String limit           //limit:用于进行分页,相对于select语句

//limit关键字后面的部分。

);</span>
我忍不住想要表达对这个方法的不满,花时间理解这个方法中各个参数设置
 的时间还不如去掌握这条select语句的语法格式了。



当然,这个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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: