SQlite三问

2020-12-11 10:09:36 浏览数 (1)

感冒了,可太难受了,感觉像是行尸走肉。这两天应该全国都在变冷吧,大家一定要注意身体啊。少熬夜了,我感觉我就是熬夜导致免疫力下降了。

今天就说点简单的咯,说下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

拜拜

最后祝我早日康复,然后给大家带来更多优质的文章吧。晚安。

0 人点赞