数据库工具之 —— SQLite

embedded/2024/10/22 18:41:55/

数据库工具之 —— SQLite

SQLite 是一个非常流行的轻量级数据库,它是一个嵌入式的数据库,意味着数据库文件是存储在磁盘上的一个单一文件。SQLite 不需要一个独立的服务器进程,这使得它非常适合用于小型应用、移动应用、桌面应用,或者任何需要轻量级数据库解决方案的场景。

以下是一些 SQLite 的主要特性:

  1. 轻量级: SQLite 只包含一个非常小的库,通常只有几百KB。
  2. 无需配置: 无需安装和配置数据库服务器,直接使用。
  3. 跨平台: 支持多种操作系统,包括 Windows、Linux、macOS 等。
  4. 事务支持: 支持事务,确保数据的一致性。
  5. 并发控制: 支持多线程访问,但写入操作是串行的,以保证数据完整性。
  6. SQL 支持: 支持标准的 SQL 语法,包括大部分 SQL92 标准。
  7. 存储过程: 从 SQLite 3.8.3 版本开始,支持存储过程。
  8. 触发器: 支持触发器,可以基于数据库事件自动执行代码。
  9. 无服务器: 没有服务器组件,所有操作都在客户端进行。
  10. 可扩展性: 可以通过编写自定义函数和聚合来扩展功能。

SQLite 的使用通常涉及以下几个步骤:

  1. 创建数据库: 使用 sqlite3 命令行工具或编程接口创建一个新的数据库文件。
  2. 打开数据库: 连接到现有的数据库文件。
  3. 执行 SQL 语句: 执行 SQL 语句来创建表、插入数据、查询数据等。
  4. 事务管理: 使用事务来确保数据库操作的原子性。
  5. 关闭数据库: 完成操作后,关闭数据库连接。

SQLite 可以通过多种编程语言进行操作,包括但不限于 Python、Java、C#、PHP 等。每种语言都有相应的库或模块来与 SQLite 交互。

使用 SQLite 主要包括以下几个步骤:

1. 安装 SQLite

SQLite 通常已经预装在大多数操作系统上。如果没有,可以从 SQLite 官网 下载并安装它。

2. 命令行工具

使用 SQLite 的命令行工具 sqlite3 可以执行数据库操作。以下是一些基本的命令行操作:

  • 打开数据库:

    sqlite3 database_name.db
    

    这会打开一个名为 database_name.db数据库,如果文件不存在,SQLite 会创建它。

  • 退出命令行:

    .quit
    
  • 查看数据库中所有表:

    .tables
    
  • 查看表结构:

    .schema table_name
    
  • 执行 SQL 语句:

    SELECT * FROM table_name;
    

3. 编程接口

SQLite 提供了多种编程语言的接口,以下是一些常见的编程语言如何连接和操作 SQLite 数据库的示例:

Python 示例

在 Python 中,可以使用内置的 sqlite3 模块来操作 SQLite 数据库

import sqlite3# 连接到数据库,如果不存在则创建
conn = sqlite3.connect('example.db')
cursor = conn.cursor()# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,age INTEGER
)
''')# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:print(row)# 关闭连接
conn.close()
Java 示例

在 Java 中,可以使用 JDBC 来连接和操作 SQLite 数据库

import java.sql.*;public class Main {public static void main(String[] args) {String url = "jdbc:sqlite:example.db";try (Connection conn = DriverManager.getConnection(url);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {// 创建表stmt.executeUpdate("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER)");// 插入数据stmt.executeUpdate("INSERT INTO users (name, age) VALUES ('Alice', 30)");// 查询数据while (rs.next()) {System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Age: " + rs.getInt("age"));}} catch (SQLException e) {e.printStackTrace();}}
}

4. 事务管理

SQLite 支持事务,确保数据库操作的原子性。在编程接口中,可以通过提交或回滚事务来管理它们。

5. 错误处理

在使用 SQLite 时,处理 SQL 错误是很重要的。确保代码能够捕获并处理 SQLException 或类似的异常。

C++ 示例使用方法

在 C++ 中,操作 SQLite 数据库通常需要使用 SQLite 的 C API,或者使用一个 C++ 封装库,比如 SQLiteCpp。以下是使用 SQLite C API 的一个基本示例:

1. 包含 SQLite 头文件

首先,确保项目中包含了 SQLite 的头文件。

#include <sqlite3.h>
#include <iostream>
#include <string>

2. 初始化和打开数据库

使用 sqlite3_open 函数打开或创建数据库

int rc;
sqlite3 *db;rc = sqlite3_open("example.db", &db);
if (rc != SQLITE_OK) {std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;sqlite3_close(db);return 1;
}

3. 创建表

使用 sqlite3_exec 执行 SQL 语句来创建表。

const char *sql = "CREATE TABLE IF NOT EXISTS users (""id INTEGER PRIMARY KEY,""name TEXT NOT NULL,""age INTEGER"")";
rc = sqlite3_exec(db, sql, 0, 0, 0);
if (rc != SQLITE_OK) {std::cerr << "SQL error: " << sqlite3_errmsg(db) << std::endl;sqlite3_close(db);return 1;
}

4. 插入数据

使用预处理语句来插入数据,这有助于防止 SQL 注入。

const char *insert_sql = "INSERT INTO users (name, age) VALUES (?, ?)";
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, insert_sql, -1, &stmt, 0);
if (rc != SQLITE_OK) {std::cerr << "Prepare statement error: " << sqlite3_errmsg(db) << std::endl;sqlite3_close(db);return 1;
}// 绑定参数
std::string name = "Alice";
int age = 30;
sqlite3_bind_text(stmt, 1, name.c_str(), -1, SQLITE_TRANSIENT);
sqlite3_bind_int(stmt, 2, age);// 执行插入操作
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {std::cerr << "Insert error: " << sqlite3_errmsg(db) << std::endl;
}// 重置预处理语句以供再次使用
sqlite3_reset(stmt);

5. 查询数据

使用预处理语句来查询数据。

const char *select_sql = "SELECT * FROM users";
sqlite3_stmt *select_stmt;
rc = sqlite3_prepare_v2(db, select_sql, -1, &select_stmt, 0);
if (rc != SQLITE_OK) {std::cerr << "Prepare statement error: " << sqlite3_errmsg(db) << std::endl;sqlite3_finalize(stmt);sqlite3_close(db);return 1;
}// 执行查询
while ((rc = sqlite3_step(select_stmt)) == SQLITE_ROW) {std::cout << "ID: " << sqlite3_column_int(select_stmt, 0)<< ", Name: " << sqlite3_column_text(select_stmt, 1)<< ", Age: " << sqlite3_column_int(select_stmt, 2) << std::endl;
}
if (rc != SQLITE_DONE) {std::cerr << "Select error: " << sqlite3_errmsg(db) << std::endl;
}// 最终化预处理语句
sqlite3_finalize(select_stmt);

6. 关闭数据库

完成所有操作后,关闭数据库连接。

sqlite3_finalize(stmt);
sqlite3_close(db);

这个示例展示了如何在 C++ 中使用 SQLite 的基本操作,包括打开数据库、创建表、插入和查询数据。在实际应用中,可能还需要处理更复杂的 SQL 语句和异常情况。记得在使用完 SQLite 资源后释放它们,以避免内存泄漏。

SQLite


http://www.ppmy.cn/embedded/53927.html

相关文章

企业工程项目管理系统源码:Java版源码解析

一、项目概述 鸿鹄工程项目管理系统是基于Spring Cloud、Spring Boot、Mybatis、Vue和ElementUI技术栈&#xff0c;采用前后端分离架构构建的工程管理软件。它旨在应对企业快速发展中的管理挑战&#xff0c;提升工程管理效率&#xff0c;减轻工作负担&#xff0c;加速信息处理…

android:exported=“false“

书籍&#xff1a; 《第一行代码 Android》第三版 开发环境&#xff1a; Android Studio Jellyfish | 2023.3.1 问题&#xff1a; A launchable activity must be exported as of Android 12, which also makes it available to other apps 新建的activity中的android:exp…

LearnOpenGL - Android OpenGL ES 3.0 使用 FBO 进行离屏渲染

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形OpenGL - 如何理解 VAO 与 VBO 之间的关系LearnOpenGL - Android OpenGL ES 3.0 绘制…

Android高级面试_2_IPC相关

Android 高级面试-3&#xff1a;语言相关 1、Java 相关 1.1 缓存相关 问题&#xff1a;LruCache 的原理&#xff1f; 问题&#xff1a;DiskLruCache 的原理&#xff1f; LruCache 用来实现基于内存的缓存&#xff0c;LRU 就是最近最少使用的意思&#xff0c;LruCache 基于L…

同三维T700转换器 USB转HDMI转换器

让USB摄像头变成HDMI输出&#xff0c;支持4K60输出 一、产品简介&#xff1a; 此转换器可以把USB信号转成HDMI信号&#xff0c;支持4K60 HDMI输出&#xff0c;有效解决了USB摄像头连接电视、显示器、导播台的问题&#xff0c;带USB控制口&#xff0c;可升级/接蓝牙接收器&#…

Linux运维:MySQL数据库(1)

1.信息与数据&#xff1a; 数据是信息的载体&#xff0c;信息是数据的内涵。数据库就是存储数据的仓库&#xff0c;并长期存储在计算机磁盘中&#xff0c;可由多个用户和应用程序共享的数据集合&#xff0c;就是数据库。 2.数据库中的数据的特点&#xff1a; 2.1.数据是按照某…

上古世纪战争台服官网地址+台服预约+预创建角色教程

上古世纪战争台服上线啦&#xff0c;在《上古世纪战争》中&#xff0c;通过主要势力和地区&#xff0c;剧情和角色可以想起原作。《上古世纪战争》的主要背景为&#xff0c;原大陆消失之后&#xff0c;完成移民的种族们定居在诺伊大陆之后遇到的多个势力之间的冲突。同时&#…

硬件实用技巧:电容精度和常用容值表

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140009042 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…