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操作的方式
- sql语句操作。
纯sql操作
// 这个方法有多个重载
SQLiteOpenHelper.execSQL(String sql);
- 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部分 | 描述 |
---|---|---|
table | from table_name | 表名 |
columns | select column1, column2 | 字段名 |
selection | where column = value | where的约束条件 |
selectionArgs | - | where中的占位符值 |
groupBy | group by column | 指定需要group by的列 |
having | having column = value | 对group by后结果的进一步约束 |
orderBy | order desc by column1 | 查询结果排序方式 |
limit | limit 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内容不多,核心类就两个。
- 数据库创建与更新
SQLiteOpenHelper 类
- 增删改查操作
SqLiteDatabase 类