数据库SQLite
7.2.1 SQLite介绍
SQLite是一种小巧的嵌入式数据库,在App开发过程中只用到数据定义和数据操纵两类SQL
数据定义语言:表格的创建,删除,结构修改
数据操纵语言:数据的增删改查
表格创建
SQLite支持整型INTEGER、长整型LONG、字符串VARCHAR、浮点数FLOAT,但不支持布尔类型。布尔类型的数据要使用整型保存,如果直接保存布尔数据,在入库时SQLite会自动将它转为0或1,其中0表示false,1表示true。
表格修改
表格的修改动作由alter命令完成,格式为"ALTER TABLE 表格名称 修改操作,"。不过SQLite只支持增加字段,不支持修改字段,也不支持删除字段。对于字段增加操作,需要在alter之后补充add命令,具体格式如“ALTER TABLE 表格名称 ADD COLUMN 字段名称 字段类型;”。
注意,SQLite的ALTER语句每次只能添加1列字段,若要添加多列,就得分多次添加。
7.2.2 数据库管理器SQLiteDataBase
SQLiteDatabase是SQLite的数据库管理类,它提供了若干操作数据表的APl,常用的方法有3类:
1.管理类,用于数据库层面的操作。
- openDatabase:打开指定路径的数据库。
- isOpen:判断数据库是否已打开。
- close:关闭数据库。
- getVersion:获取数据库的版本号。
- setVersion:设置数据库的版本号。
SQLiteDatabase sqLiteDatabase = openOrCreateDatabase("zhangsan", MODE_PRIVATE, null);
2.事务类,用于事务层面的操作。
- beginTransaction:开始事务。
- setTransactionSuccessful:设置事务的成功标志。
- endTransaction:结束事务,结束事务时查看是否有事务成功的标志,成功则提交并结束,不成功则回滚
3.数据处理类,用于数据表层面的操作。
- execSQL:执行拼接好的SQL控制语句。
- delete:删除符合条件的记录。
- update:更新符合条件的记录。
- insert:插入一条记录。
- query:执行查询操作,返回结果集的游标。
- rawQuery:执行拼接好的SQL查询语句,返回结果集的游标。
7.2.3 SQLiteOpenHelper
SQLiteOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite的合理使用。
SQLiteOpenHelper的具体使用步骤如下:
- 新建一个继承自SQLiteOpenHelper的数据库操作类,重写onCreate和onUpgrade两个方法。
- 封装保证数据库安全的必要方法。
- 提供对表记录进行增加、删除、修改、查询的操作方法。
package com.example.lesson.utils.sqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class SQLiteUtils extends SQLiteOpenHelper {
private static SQLiteUtils mHelper = null;
private static SQLiteDatabase mReadDatabase = null;
private static SQLiteDatabase mWriteDatabase = null;
//单例模式
public static SQLiteUtils getInstance(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
if (mHelper == null) {
return new SQLiteUtils(context, name, factory, version);
} else {
return mHelper;
}
}
//构造方法,必须调用父类的构造方法
public SQLiteUtils(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//打开写链接
private SQLiteDatabase openWriteLink() {
if (mWriteDatabase == null || !mWriteDatabase.isOpen()) {
return mHelper.getWritableDatabase();
} else {
return mWriteDatabase;
}
}
//打开读链接
private SQLiteDatabase openReadLink() {
if (mReadDatabase == null || !mReadDatabase.isOpen()) {
return mHelper.getReadableDatabase();
} else {
return mReadDatabase;
}
}
//关闭链接
private void closeLink() {
if (mReadDatabase != null && mReadDatabase.isOpen()) {
mReadDatabase.close();
mReadDatabase = null;
}
if (mWriteDatabase != null && mWriteDatabase.isOpen()) {
mWriteDatabase.close();
mWriteDatabase = null;
}
}
//数据库初始化时需要进行的一些操作,比如创建数据表
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
7.2.4 增删改查的方法
增
//获取写入database对象
//获取写入参数对象
ContentValues values = new ContentValues();
//将要传入的参数以键值对的方式写入参数对象
values.put();
writableDatabase.insert(<1>,<2>,<3>);
参数分别为:表名,第三个参数为空时的默认字段名,ContentValues对象
删
//获取写入database对象
writableDatabase.delete(<1>,<2>,<3>);
//参数分别为:表名,where语句,参数数组
writableDatabase.delete(TABLE_NAME,"where name = ?",new String[]{"zhangsan"});
//删除全部内容
writableDatabase.delete(TABLE_NAME,"1=1",null);
改
//获取写入database对象
ContentValues values = new ContentValues();
values.put();
//参数分别为:表名,写入参数对象,where语句,参数数组
writableDatabase.update(TABLE_NAME,values,"name = ?",new String[]{"zhangsan"});
查
//获取读取database对象
//查询所有记录时:第一个参数为表名,其余为null,获得游标
Cursor cursor = readableDatabase.query(TABLE_NAME, );
//根据columnindex读取每一列的值
while (cursor.moveToNext()) {
String name = cursor.getColumnName(0);
}
//根据条件查询时
query();
//其中的selection参数为"where name = ?" ,selectionArgs = 参数数组
//然后依然是获取游标,遍历
下方App Inspection栏可以看到运行应用中的数据库