SQLite数据库

SQLite 数据库详解

SQLite 是一种轻量级、嵌入式的关系型数据库管理系统,它无需独立的服务器进程,数据存储在一个单一的文件中。由于其便捷性和稳定性,SQLite 被广泛应用于移动设备、桌面应用和嵌入式系统中。以下是对 SQLite 的详细讲解。


一、SQLite 的主要特点

  1. 嵌入式数据库

    • SQLite 是嵌入式数据库管理系统,数据库引擎与应用程序捆绑在一起,没有独立的服务器进程。这意味着数据存储在一个本地文件中,应用程序可以直接操作文件,无需网络通信。
  2. 轻量级

    • SQLite 的体积非常小,整个库通常只有几百 KB 的大小,非常适合资源有限的设备或场景。
  3. 无服务器

    • SQLite 不需要数据库服务器。所有数据库操作都在本地执行,不依赖于外部服务。应用程序可以直接通过 SQL 操作数据库文件。
  4. 零配置

    • SQLite 不需要复杂的配置或管理。应用程序可以直接创建数据库文件并开始使用,不需要专门的数据库管理员进行安装、配置或优化。
  5. 事务支持

    • SQLite 支持 ACID(原子性、一致性、隔离性和持久性)事务管理,确保数据库操作的可靠性。事务要么全部成功,要么全部回滚,保持数据一致性。
  6. 单一数据库文件

    • 所有的表、索引、视图和触发器等数据都存储在一个单一的文件中。这使得备份和迁移数据库变得非常简单。
  7. 跨平台

    • SQLite 支持几乎所有操作系统(Windows、Linux、MacOS、Android、iOS 等),并且数据库文件格式跨平台兼容,可以轻松在不同平台之间共享。

二、SQLite 的核心概念

1. 数据库

SQLite 的数据库是一个文件。这个文件存储了数据库的所有数据和结构(如表、索引、视图等)。通过 SQL 语句,应用程序可以对这个文件进行读写操作。

2. 表 (Table)

表是数据库中用于存储数据的主要结构,由行和列组成。每一行代表一条记录,每一列代表一个字段。

3. 列 (Column)

列定义了表中存储的数据类型和属性,如整数、文本、浮点数等。每一列都有一个名称和数据类型,类似于表单中的字段。

4. 行 (Row)

行是表中的一条记录,表示实际存储的数据。每一行由多个列的数据组成。

5. 索引 (Index)

索引是一种加速数据查询的结构。通过为表的某些列创建索引,可以提高查询性能,尤其是当数据量较大时。SQLite 支持为单列或多列创建索引。

6. 视图 (View)

视图是一个虚拟表,它不存储数据,只存储 SQL 查询。视图的使用可以简化复杂查询,并使得数据库结构更加清晰。

7. 触发器 (Trigger)

触发器是一种机制,它允许在特定的事件(如插入、更新或删除记录时)自动执行预定义的 SQL 语句。触发器可以用于保持数据的一致性或自动化任务。


三、SQLite 数据类型

SQLite 的类型系统相对宽松,它允许列中的数据类型与定义的类型不同。即使某一列被定义为 INTEGER 类型,实际上仍然可以存储字符串或其他类型的数据。但 SQLite 提供了一些基本的数据类型:

  1. NULL:表示空值。
  2. INTEGER:带符号的整数,存储 1 到 8 字节,具体取决于数值的大小。
  3. REAL:浮点数,存储为 8 字节的 IEEE 浮点数。
  4. TEXT:文本字符串,使用 UTF-8、UTF-16BE 或 UTF-16LE 编码存储。
  5. BLOB:二进制大对象,存储为原始数据,不进行任何转换。

四、SQLite 的基本操作

SQLite 支持标准的 SQL 操作,以下是一些常见的操作和示例:

1. 创建表

使用 CREATE TABLE 语句可以创建一个表。

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 主键,自动递增
    name TEXT NOT NULL,                    -- 名称,不能为空
    age INTEGER,                           -- 年龄
    email TEXT                             -- 邮箱
);
  • PRIMARY KEY 定义主键,它唯一标识表中的每一行。
  • AUTOINCREMENT 自动为每次插入的数据生成递增的 ID。
  • NOT NULL 表示该字段不能为空。
2. 插入数据

使用 INSERT INTO 语句插入数据。

INSERT INTO users (name, age, email)
VALUES ('Alice', 30, 'alice@example.com');

可以一次插入多条记录:

INSERT INTO users (name, age, email)
VALUES ('Bob', 25, 'bob@example.com'),
       ('Charlie', 35, 'charlie@example.com');
3. 查询数据

使用 SELECT 语句从表中查询数据。

SELECT name, age FROM users WHERE age > 25;

查询所有记录:

SELECT * FROM users;

按条件排序查询结果:

SELECT * FROM users ORDER BY age DESC;
4. 更新数据

使用 UPDATE 语句更新现有记录。

UPDATE users
SET email = 'alice_new@example.com'
WHERE name = 'Alice';
5. 删除数据

使用 DELETE FROM 语句删除记录。

DELETE FROM users WHERE name = 'Alice';

删除表中的所有数据:

DELETE FROM users;
6. 删除表

使用 DROP TABLE 删除整个表。

DROP TABLE IF EXISTS users;

五、SQLite 的事务管理

事务可以确保一组数据库操作的完整性,所有操作要么全部成功,要么全部失败。

  • 开启事务BEGIN TRANSACTION;
  • 提交事务COMMIT;
  • 回滚事务ROLLBACK;

示例:使用事务进行操作

BEGIN TRANSACTION;

INSERT INTO users (name, age, email) VALUES ('John', 40, 'john@example.com');
UPDATE users SET age = 41 WHERE name = 'John';

COMMIT;

如果在 COMMIT 之前操作失败,可以使用 ROLLBACK 恢复到事务开始之前的状态。


六、SQLite 在 Android 中的使用

在 Android 开发中,SQLite 是默认的数据库系统,使用 SQLiteOpenHelper 类可以方便地管理数据库的创建和版本升级,SQLiteDatabase 类用于执行 SQL 操作。

1. 创建 SQLiteOpenHelper 类
public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "MyDatabase.db";
    private static final int DATABASE_VERSION = 1;

    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建数据库时调用
        String CREATE_TABLE = "CREATE TABLE users ("
                + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                + "name TEXT,"
                + "age INTEGER,"
                + "email TEXT);";
        db.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 当数据库版本升级时调用
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
}
2. 操作数据库

使用 SQLiteDatabase 类进行增删改查操作。

SQLiteDatabase db = dbHelper.getWritableDatabase();

// 插入数据
ContentValues values = new ContentValues();
values.put("name", "Alice");
values.put("age", 30);
values.put("email", "alice@example.com");
db.insert("users", null, values);

// 查询数据
Cursor cursor = db.query("users", null, null, null, null, null, null);

// 更新数据
ContentValues updateValues = new ContentValues();
updateValues.put("email", "alice_new@example.com");
db.update("users", updateValues, "name = ?", new String[]{"Alice"});

// 删除数据
db.delete("users", "name = ?", new String[]{"Alice"});

七、SQLite 的优缺点

优点:
  1. 轻量级:SQLite 占用空间小,适合嵌入式设备和移动设备。
  2. 无需服务器:SQLite 无需服务器支持,数据操作直接本地执行。
  3. 跨平台兼容:数据库文件可以在不同操作系统之间直接共享。
  4. 高效:SQLite
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值