感冒了,可太难受了,感觉像是行尸走肉。这两天应该全国都在变冷吧,大家一定要注意身体啊。少熬夜了,我感觉我就是熬夜导致免疫力下降了。
今天就说点简单的咯,说下Android端用的数据库引擎——SQLite。
- 介绍下SQLite
- 为什么Android端要使用这个数据库引擎。
- 谈谈基本语法和市面上的封装库。
介绍下SQLite
- SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的
SQL
数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite
引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite
直接访问其存储文件。 - 它是用C语言构建,在
Android
系统架构中的系统运行库层的c/c
程序库部分。
为什么Android端要使用这个数据库引擎。
SQLite有如下特性,也就决定了其在移动端的地位:
- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite
不需要配置,这意味着不需要安装或管理。- 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
SQLite
是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。SQLite
是自给自足的,这意味着不需要任何外部的依赖。SQLite
事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。SQLite
支持 SQL92(SQL2)标准的大多数查询语言的功能。SQLite
使用 ANSI-C 编写的,并提供了简单和易于使用的 API。SQLite
可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
谈谈基本语法。
先说说SQLite的语法,分为创建,增,删,查,改
。
- 创建
1)创建语法:
代码语言:javascript复制CREATE TABLE main.表名(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
account TEXT,
pwd TEXT,
age INT
);
AUTOINCREMENT代表自增主键。
2)在Android中的用法:
代码语言:javascript复制public class MySQLite extends SQLiteOpenHelper {
public static String DB_NAME="main.db";
public MySQLite(Context context, int version) {
super(context, DB_NAME, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//数据库第一次创建时被调用
db.execSQL("create table 表名 (_id integer primary key autoincrement)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//数据库版本变化时调用
}
}
- 增。
1)基本语法
代码语言:javascript复制INSERT INTO USER (name,pwd) VALUES ("jimu", "123456");
2)Android中用法
代码语言:javascript复制 ContentValues values = new ContentValues();
values.put("name","jimu")
values.put("pwd","123456")
sqlhelper.getWritableDatabase().insert(表名, null, values);
- 删
1)基本语法
代码语言:javascript复制//删除数据
DELETE FROM USER WHERE name = "jimu";
//删除数据库
DROP TABLE 数据库名.表名;
2)Android中用法:
代码语言:javascript复制//删除数据
getWritableDatabase().delete(表名, "name=?", new String[]{"jimu"});
//删除数据库
getWritableDatabase().execSQL("DROP TABLE IF EXISTS " TABLE_NAME);
- 查
1)基本语法
代码语言:javascript复制SELECT * 或者 具体的字段
FROM 表名
[ WHERE <条件> ]
[ GROUP BY 列名 ]
[ HAVING <条件> ]
[ ORDER BY 列名 <DESC> | <ASC> ]
[ LIMIT 行数 OFFSET 偏移量]
2)Android中用法
代码语言:javascript复制getWritableDatabase().query(TABLE_NAME_PERSON,null,"name=?",new String[]{"jimu"},null,null,null);
- 改
1)基本语法
代码语言:javascript复制UPDATE USER SET name = "jimu2" WHERE id = 1;
2)Android中用法:
代码语言:javascript复制getWritableDatabase().update(String table,ContentValues values, String whereClause, String[] whereArgs)
最后说说市面上的数据库框架
主要有以下几款:
- OrmLite,LitePal(郭神的框架),GreenDao,Room(Jetpack组件)
网上也有很多对于各个框架的比较,这里就不细说了。我觉得都可以用,没有很明显的优缺点。如果你的项目框架是MVVM
架构的话,就直接用room
吧,毕竟是jetpack
组件,对Livedata,paging等有比较好的支持。
参考
https://juejin.cn/post/6891411303798308872
拜拜
最后祝我早日康复,然后给大家带来更多优质的文章吧。晚安。