聊聊SQLite轻量级关系型数据库

2023年 12月 13日 84.9k 0

SQLite介绍

SQLite 是一种轻量级的关系型数据库管理系统,它被设计为嵌入式数据库,不需要独立的服务器进程,可以直接访问存储在文件中的数据库。SQLite 在移动设备、嵌入式系统以及小型应用程序中被广泛使用,它具有简单、快速、可靠的特点。SQLite 使用 SQL 语言进行数据库操作,支持大部分标准的 SQL 语法。

在使用 SQLite 时,可以通过 SQL 语句来创建、查询、更新和删除数据库中的数据。同时,SQLite 也支持事务处理、触发器、视图等数据库特性,使得它在小型应用程序中也能满足一定的复杂需求。

Android中的SQLite是一种轻量级的关系型数据库管理系统,它被广泛用于Android应用程序中存储和管理数据。SQLite数据库以单个文件的形式存储在设备的内部存储器上,可以通过SQL语句进行数据的增删改查操作。

SQLite使用

SQLite是一种轻量级的关系型数据库管理系统,它被设计为嵌入式数据库,可以在各种操作系统上运行。SQLite的特点包括零配置、无服务器、支持事务等。它通常用于移动设备、嵌入式系统以及小型应用程序中。

通常要使用SQLite,需要通过以下步骤操作:

  • 下载SQLite:可以从官方网站下载SQLite的最新版本,也可以通过包管理工具安装SQLite。
  • 创建数据库:使用SQLite命令行工具或者SQLite的API来创建一个数据库文件。
  • 连接数据库:通过命令行工具或者编程语言的API来连接到数据库。
  • 执行SQL语句:使用SQL语句来创建表、插入数据、查询数据等操作。
  • 断开连接:在完成操作后,记得断开与数据库的连接。
  • SQLite的SQL语句和常规的关系型数据库类似,但也有一些特有的语法和功能。在使用SQLite时,需要注意其特有的限制和特性,比如数据类型的灵活性和事务处理的支持等。

    在Android开发中,可以使用SQLite作为本地数据库存储数据。以下是使用SQLite的基本步骤:

  • 创建数据库:在SQLiteOpenHelper类中创建数据库,并定义表格结构和初始化数据。
  • public class DBHelper extends SQLiteOpenHelper {
        private static final String DATABASE_NAME = "mydatabase.db";
        private static final int DATABASE_VERSION = 1;
    
        public DBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            // 创建表格
            db.execSQL("CREATE TABLE IF NOT EXISTS mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);");
            // 初始化数据
            db.execSQL("INSERT INTO mytable (name) VALUES ('John');");
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // 升级数据库时的操作
        }
    }
  • 执行数据库操作:使用SQLiteDatabase类执行数据库操作,如插入、更新、删除和查询数据。
  • DBHelper dbHelper = new DBHelper(context);
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    
    // 插入数据
    ContentValues values = new ContentValues();
    values.put("name", "Alice");
    db.insert("mytable", null, values);
    
    // 查询数据
    Cursor cursor = db.query("mytable", new String[]{"_id", "name"}, null, null, null, null, null);
    while (cursor.moveToNext()) {
        int id = cursor.getInt(cursor.getColumnIndex("_id"));
        String name = cursor.getString(cursor.getColumnIndex("name"));
        // 处理数据
    }
    
    // 关闭数据库连接
    db.close();
  • 注意事项:在使用SQLite时,需要注意线程安全、数据类型、SQL注入等安全性问题,以及数据库版本升级时的处理。
  • SQLite数据库升级

    public class DBHelper extends SQLiteOpenHelper {
        private static final String DATABASE_NAME = "mydatabase.db";
        private static final int DATABASE_VERSION = 2;
    
        // 构造函数
        public DBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        // 创建表
        @Override
        public void onCreate(SQLiteDatabase db) {
            String createTableQuery = "CREATE TABLE mytable (id INTEGER PRIMARY KEY, name TEXT)";
            db.execSQL(createTableQuery);
        }
    
        // 升级数据库
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            if (oldVersion < 2) {
                // 添加新表
                String createNewTableQuery = "CREATE TABLE newtable (id INTEGER PRIMARY KEY, age INTEGER)";
                db.execSQL(createNewTableQuery);
            }
            if (oldVersion < 3) {
                // 添加新字段
                String addNewColumnQuery = "ALTER TABLE mytable ADD COLUMN email TEXT";
                db.execSQL(addNewColumnQuery);
            }
        }
    }

    在上面的示例中,我们创建了一个名为mydatabase.db的数据库,并指定版本号为2。在onCreate方法中,我们创建了一个名为mytable的表。在onUpgrade方法中,我们检查旧版本号,如果旧版本号小于2,则添加一个名为newtable的新表;如果旧版本号小于3,则向mytable表中添加一个名为email的新字段。当你的应用程序升级时,数据库结构也会相应地进行升级。

    SQLite事务操作

    数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么全部成功执行,要么全部不执行。在数据库中,事务具有以下四个特性,通常称为ACID特性:

  • 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部不执行,不存在部分执行的情况。
  • 一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏,数据库从一个一致性状态转换到另一个一致性状态。
  • 隔离性(Isolation):多个事务并发执行时,每个事务的操作对其他事务是隔离的,一个事务的中间结果不会被其他事务看到。
  • 持久性(Durability):一旦事务提交,其所做的修改将会永久保存在数据库中,即使系统发生故障也不会丢失。
  • 在数据库中,事务可以使用以下语法来控制:

    BEGIN TRANSACTION; -- 开始事务
    -- 执行一系列数据库操作
    COMMIT; -- 提交事务
    ROLLBACK; -- 回滚事务

    在SQLite中,事务是一组数据库操作,这些操作要么全部成功执行,要么全部失败回滚。SQLite使用以下语句来控制事务:

    • BEGIN TRANSACTION: 开始一个新的事务
    • COMMIT: 提交事务,将所有操作永久保存到数据库
    • ROLLBACK: 回滚事务,撤销自上次BEGIN TRANSACTION以来的所有操作

    在SQLite中,默认情况下,每个SQL语句都被视为一个事务。如果要在一个事务中执行多个操作,可以使用BEGIN TRANSACTION开始事务,然后使用COMMIT提交事务,或者使用ROLLBACK回滚事务。

    例如,要在SQLite中执行一个事务,可以按照以下格式编写SQL语句:

    BEGIN TRANSACTION;
    -- 执行一系列数据库操作
    COMMIT;

    在Android开发中,SQLite对于事物的操作如下:

    // 开始事务
    db.beginTransaction();
    try {
        // 执行数据库操作
        // 插入数据
        db.insert(TABLE_NAME, null, values);
        // 更新数据
        db.update(TABLE_NAME, values, whereClause, whereArgs);
        // 删除数据
        db.delete(TABLE_NAME, whereClause, whereArgs);
        // 标记事务成功
        db.setTransactionSuccessful();
    } finally {
        // 结束事务
        db.endTransaction();
    }

    这样,如果在BEGIN TRANSACTION和COMMIT之间的操作中发生错误,整个事务将被回滚,数据库将不会受到影响。

    相关文章

    Oracle如何使用授予和撤销权限的语法和示例
    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
    社区版oceanbase安装
    Oracle 导出CSV工具-sqluldr2
    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

    发布评论