Android SQLite数据库操作

1. Sqlite简介

  • Sqlite是一种轻量级,零配置的,可嵌入的程序驱动型的二进制文件,同时也是一种关系型数据库。鉴于Sqlite数据库的这些优点,现在流行的操作系统Android和ios都选择使用Sqlite作为数据存储的主要方式。

2. Sqlite的使用场景

  • 现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧。对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取。

3. 数据库的创建

  • 数据库的创建是通过数据库的帮助类来实现的,当用户要要创建一个数据库就要定义一个帮助类,让其继承SqliteOpenHelper这个类,然后子该类中实现一定的回调方法就可以创建数据库了。

《Android SQLite数据库操作》 数据库的创建

4:Sqlite数据库中获取数据库对象的两个方法:

    1. 获取数据库实例时使用了getWritableDatabase()方法。
    1. 在getReadableDatabase()方法中,首先判断是否已存在数据库实例并且是打开状态,如果是,则直接返回该实例,否则试图获取一个可读写模式的数据库实例,如果遇到磁盘空间已满等情况获取失败的话,再以只读模式打开数据库,获取数据库实例并返回,然后为数据库对象赋值为最新打开的数据库实例。
    1. getReadableDatabase()一般都会返回和getWritableDatabase()一样的数据库实例,所以我们在DBManager构造方法中使用getWritableDatabase()获取整个应用所使用的数据库实例是可行的
    1. 当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法。
    1. onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。
    1. onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的。

5. Sqlite数据库中简单的Sql语句:

  • 插入操作:

    《Android SQLite数据库操作》 插入操作

  • 删除操作:

delete from person where name = 'wuyun'
  • 修改操作:

    《Android SQLite数据库操作》 修改操作

  • 查询操作:

    《Android SQLite数据库操作》 查询操作

6: 使用API 的增删改查操作

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。

  • 首先定义DB 名字 、TABLE名字 、字段名字。

《Android SQLite数据库操作》 定义

  • 插入、修改、删除操作
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。

    • 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); //返回当前行指定列的值
    原文作者:AKyS佐毅
    原文地址: https://www.jianshu.com/p/7b6fe811db52
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞