Android - base - SQLite

Android 自带的SQLite数据库

大纲

  • SqLite 数据类型
  • 核心类
  • 创建和升级数据库
  • CRUD操作

#SqLite 数据类型

type说明
integer整型
real浮点型
text文本
blow二进制

# 核心类

创建更新
SQLiteOpenHelper 类
创建类继承该类,实现 onCreate 创建 or onUpgrade 更新 方法。

CRUD
SqLiteDatabase 类
得到:SQLiteOpenHelper 类的 getReadableDatabase() or getWritableDatabase() 方法返回。

##SQLiteOpenHelper 类 abstract

SqLite 操作的帮助类,这个类是抽象的,我们要创建一个类去继承它并实现 onCreate() 和 onUpgrade() 方法,然后分别在这两个方法内去实现创建、升级数据库的逻辑。

SQLiteOpenHelper 类的构造方法

 /*
  *  如果检测版本号值大于上次的值则执行 onUpgrade() 方
  * @ param context 上下文对象
  * @ param name 数据库名
  * @ param factory
  * @ param version 版本号
  */
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)

SQLiteOpenHelper 类还有两个非常重要的实例方法

getReadableDatabase():数据库不存在则调用 onCreate()方法,数据库不可写入时用 只读 方式打开。
getWritableDatabase():数据库不存在则调用 onCreate()方法,数据库不可写入时 抛异常

#创建和升级数据库

##创建数据库
  • 调用 SQLiteOpenHelper 类的 getReadableDatabase() or getWritableDatabase() 方法。
##升级数据库
  • 传入 SQLiteOpenHelper 构造方法版本号值比上次大,则会自动执行 onUpgrade() 方法。

#CURD操作

Android 原生提供了两种CURD操作的方式

  1. sql语句操作。纯sql操作
// 这个方法有多个重载
SQLiteOpenHelper.execSQL(String sql);
  1. SqLiteDatabase 对象。对sql语句熟练度要求低

获取SqLiteDatabase 对象:调用 SQLiteOpenHelper 类的 getReadableDatabase() or getWritableDatabase() 方法。

##insert
 /*
  * @param table 表名
  * @param nullColumnHack 字段默认值为NULL
  * @param values 数据
  */
public long insert(String table, String nullColumnHack, ContentValues values)
// 得到SQLiteDatabase对象
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
// 创建数据对象
ContentValues values = new ContentValues();

values.put("name", "Head First Java");
values.put("price", 58.99);
....

// 插入数据
db.insert("Book", null, values);
##delete
 /*
  * @param table 表名
  * @whereClause 条件
  * @whereArgs 条件语句中占位符的值
  */
public int delete(String table, String whereClause, String[] whereArgs)
// 得到SQLiteDatabase对象
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();

// 删除数据
db.update("Book",  "name = ?", new String[] {"Head First Java"});
##update
 /*
  * @param table 表名
  * @param values 数据
  * @whereClause 条件
  * @whereArgs 条件语句中占位符的值
  */
public int update(String table, ContentValues values, String whereClause, String[] whereArgs)
// 得到SQLiteDatabase对象
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
// 创建数据对象
ContentValues values = new ContentValues();

values.put("name", "Head First Java");
values.put("price", 88.88);
....

// 更新数据
db.update("Book", values , "name = ?", new String[] {"Head First Java"});
##query

query() 方法参数非常之多,最少参数的一个方法重载也需要传入7个参数。

Cursor 类:查询结果集。

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
query() 方法参数对应SQL部分描述
tablefrom table_name表名
columnsselect column1, column2字段名
selectionwhere column = valuewhere的约束条件
selectionArgswhere中的占位符值
groupBygroup by column指定需要group by的列
havinghaving column = value对group by后结果的进一步约束
orderByorder desc by column1查询结果排序方式
limitlimit index, count查询数据的范围
// 得到SQLiteDatabase对象
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
Cursor cursor = db.query("Book", new String[] {"name", "price"}, null, null, null, null, null, null);

// 遍历结果集获取数据
if (cursor != null) {
    while (cursor.moveToNext()) {
        String name = cursor.getString(cursor.getColumnIndex("name"));
        Double price = cursor.getDouble(cursor.getColumnIndex("price"));
    }
    cursor.close();
}

#总结

其实SQLite内容不多,核心类就两个。

  1. 数据库创建与更新

SQLiteOpenHelper 类

  1. 增删改查操作

SqLiteDatabase 类

    原文作者:cchangee
    原文地址: https://www.jianshu.com/p/aff00b309e03
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞