• Android SQLite 增删改查操作的补充说明

    一些使用细节
    服务器君一共花费 160.440 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    在前一篇里,我们介绍了 SQLite 的一些基本操作,基本上囊括了大部分的数据库操作了,这里再稍微补充一些。

    对于添加、更新和删除来说,我们都可以使用

    db.executeSQL(String sql);
    //sql语句中使用占位符,然后第二个参数是实际的参数集
    db.executeSQL(String sql, Object[] bindArgs);
    

    除了统一的形式之外,他们还有各自的操作方法:

    db.insert(String table, String nullColumnHack, ContentValues values);  
    db.update(String table, Contentvalues values, String whereClause, String whereArgs);  
    db.delete(String table, String whereClause, String whereArgs);
    
    • 以上三个方法的第一个参数都是表示要操作的表名;
    • insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;
    • insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;
    • update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > ? and age < ?”等,最后的whereArgs参数是占位符的实际参数值;
    • delete方法的参数也是一样。 

    下面来说说查询操作。查询操作相对于上面的几种操作要复杂些,因为我们经常要面对着各种各样的查询条件,所以系统也考虑到这种复杂性,为我们提供了较为丰富的查询形式:

    db.rawQuery(String sql, String[] selectionArgs);
    db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
    db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
    db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
    

    上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集。

    下面的几种参数都很类似,columns表示要查询的列所有名称集,selection表示WHERE之后的条件语句,可以使用占位符,groupBy指定分组的列名,having指定分组条件,配合groupBy使用,orderBy指定排序的列名,limit指定分页参数,distinct可以指定“true”或“false”表示要不要过滤重复值。

    需要注意的是,selection、groupBy、having、orderBy、limit这几个参数中不包括“WHERE”、“GROUP BY”、“HAVING”、“ORDER BY”、“LIMIT”等SQL关键字。

    最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。

    下面是Cursor对象的常用方法:

    c.move(int offset); //以当前位置为参考,移动到指定行  
    c.moveToFirst();    //移动到第一行  
    c.moveToLast();     //移动到最后一行  
    c.moveToPosition(int position); //移动到指定行  
    c.moveToPrevious(); //移动到前一行  
    c.moveToNext();     //移动到下一行  
    c.isFirst();        //是否指向第一条  
    c.isLast();     //是否指向最后一条  
    c.isBeforeFirst();  //是否指向第一条之前  
    c.isAfterLast();    //是否指向最后一条之后  
    c.isNull(int columnIndex);  //指定列是否为空(列基数为0)  
    c.isClosed();       //游标是否已关闭  
    c.getCount();       //总数据项数  
    c.getPosition();    //返回当前游标所指向的行数  
    c.getColumnIndex(String columnName);//返回某列名对应的列索引值  
    c.getString(int columnIndex);   //返回当前行指定列的值  
    

    在前面的代码示例中,已经用到了这几个常用方法中的一些,关于更多的信息,大家可以参考官方文档中的说明。

    最后当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  2. [Python程序设计] Python语言概述 6 个条目
  3. [移动开发] Android 网络通信框架Volley 1 个条目
  4. [智力开发与知识管理] 整体性学习策略 9 个条目
  5. [移动开发] Android属性系统Property 9 个条目
  6. [搜索引擎优化] 与百度权重有关的信息 2 个条目
  7. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  8. [Python程序设计] Tornado背景知识介绍 4 个条目
  9. [软件工程与项目管理] 呈现树的构建 13 个条目
  10. [Python程序设计] Django架构流程分析 7 个条目
  11. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  12. [移动开发] Android Studio里的Gradle 3 个条目
窗口 -- [博客]