简介
SQLite是一款轻型的数据库,关系型数据库;适用于嵌入式,占用资源非常低
支持 ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
支持五种数据类型
NULL: 表示该值为NULL值
INTEGER: 无符号整型值
REAL: 浮点值
TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE
BLOB: 存储Blob数据,该类型数据和输入数据完全相同
其他类型的数据会转换成五种基本数据类型存储
SQLite数据库文件存放路径/data/data/
/databases/
SDK提供的常用接口
接口 | 功能 |
---|---|
SQLiteOpenHelper | 抽象类,用于创建数据库和版本更新 |
SQLiteDatabase | 数据库访问类,用于增删改查 |
Cursor | 游标接口,作为返回值 |
CRUD:其中C代表添加(Create),R代表查询(Retrieve),U代表更新(Update),D代表删除(Delete)
数据库的创建
创建 SQLite 数据库的方法是实现 SQLiteOpenHelper 接口的子类,并且重写 onCreate() 方法,在该方法中执行用于创建 SQLite 数据库的命令
核心类(必要)
DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
构造函数context
:上下文环境(例如一个 Activity)name
:数据库名cursorFactory
:可选的游标工厂(通常是 Null)version
:版本号
onCreate(SQLiteDatabase db)
初始化数据onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
数据库版本操作db
:一个SQLiteDatabase对象oldVersion
:旧版本号newVersion
:新版本号
关键代码
1 | public class DatabaseHelper extends SQLiteOpenHelper { |
获取数据库对象
getReadableDatabase()
: 返回一个可写数据库,返回一个SQLiteDatabase对象,通过这个对象进行数据库读写操作getWritableleDatabase()
: 返回一个可读数据库,返回一个SQLiteDatabase对象,通过这个对象进行数据库写入或读写操作
SQLite 数据库操作
SQLiteDatabase 对象提供了对数据库进行操作的一系列方法
打开或创建数据库
openOrCreateDatabase (Stringpath,SQLiteDatabase.CursorFactory factory)
Stringpath
数据库的路径
SQLiteDatabase.CursorFactory factory
游标
详细可见链接,详细介绍了三种创建方法,以及之间的联系
1 | SQLiteDatabase database=SQLiteDatabase.openOrCreateDatabase("/data/data/1.db",null); |
增加
insert (String table,String nullColumnHack,ContentValues values)
- table:表名
- nullColumnHack: 空列的默认值
- values: ContentValues封装的键值对组成的Map,key代表列名,value代表该列要插入的值
1 | ContentValues values=new ContentValues(); |
删除
delete (String table,String whereClause,String[] whereArgs)
- table:表名
- whereClause:删除条件
- whereArgs[]:条件值数组
1 | String whereClause = "username=?"; |
修改
update (String table,ContentValues values,String whereClause,String[] whereArgs)
- table:表名
- values: ContentValues 类型的键值对
- whereClause:修改条件
- whereArgs[]:修改的条件值数组
1 | ContentValues values = new ContentValues(); |
查询
1 | query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); |
table:表名
columns[]:查询的列所有名称集
selection:WHERE之后的条件语句,可以使用占位符
selectionArgs:条件语句的参数数组
groupBy:指定分组的列名
having:指定分组条件,配合groupBy使用
orderBy:y指定排序的列名
limit:指定分页参数
distinct:指定“true”或“false”表示要不要过滤重复值
Cursor:返回值,相当于结果集ResultSet
查询完会返回一个Cursor对象,代表数据集的游标
方法名称 | 方法描述 |
---|---|
close() | 关闭游标,释放资源 |
copyStringToBuffer(int columnlndex, CharArrayBuffer buffer) | 在缓冲区中检索请求的列的文本,并将其存储 |
getColumnCount() | 返回所有列的总数 |
getColumnIndex( String columnName) | 返回指定列的名称,如果不存在,就返回-1 |
getColumnIndexOrThrow(String columnN ame) | 从零开始返回指定列的名称,如果不存在,将抛出异常 |
getColumnName(int columnlndex) | 从给定的索引返回列名 |
getColumnNames() | 返回一个字符串数组的列名 |
getCount() | 返回Cursor中的行数 |
moveToFirst() | 移动光标到第一行 |
moveToLast() | 移动光标到最后一行 |
moveToNext() | 移动光标到下一行 |
moveToPosition(int position) | 移动光标到一个绝对的位置 |
moveToPreviousQ | 移动光标到上一行 |
SQL
以上操作也可以通过直接执行sql语句实现
execSQL (String sql)
关闭
close()