数据库工具之 —— SQLite

news2024/11/23 9:11:53

数据库工具之 —— 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.coloradmin.cn/o/1869388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云centos7.9 挂载数据盘 并更改宝塔站点根目录

一、让系统显示中文 参考&#xff1a;centos7 怎么让命令行显示中文&#xff08;英文-&#xff1e;中文&#xff09;_如何在命令行中显示中文-CSDN博客 1、输入命令&#xff1a;locale -a |grep "zh_CN" 可以看到已经存在了中文包 2、输入命令&#xff1a;sudo vi…

Django REST framework安全实践:轻松实现认证、权限与限流功能

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff1…

ROT5、ROT13、ROT18、ROT47全系列加解密小程序

ROT5、ROT13、ROT18、ROT47全系列加解密小程序 这几天在看CTF相关的课程&#xff0c;涉及到古典密码学和近代密码学还有现代密码学。自己编了一个关于ROT全系列的加、解密小程序。 ​ ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性&a…

use embeddings stored in vector db to reduce work for LLM generating response

题意&#xff1a;使用存储在向量数据库中的嵌入来表示&#xff0c;以减少大型语言模型&#xff08;LLM&#xff09;生成响应的工作量。 问题背景&#xff1a; Im trying to understand what the correct strategy is for storing and using embeddings in a vector database, …

计算机网路面试HTTP篇三

HTTPS RSA 握手解析 我前面讲&#xff0c;简单给大家介绍了的 HTTPS 握手过程&#xff0c;但是还不够细&#xff01; 只讲了比较基础的部分&#xff0c;所以这次我们再来深入一下 HTTPS&#xff0c;用实战抓包的方式&#xff0c;带大家再来窥探一次 HTTPS。 对于还不知道对称…

海报在线制作系统源码小程序

轻松设计&#xff0c;创意无限 一款基于ThinkPHPFastAdminUniApp开发的海报在线制作系统&#xff0c; 本系统不包含演示站中的素材模板资源。​ 一、引言&#xff1a;设计新纪元&#xff0c;在线海报制作引领潮流 在数字时代&#xff0c;海报已成为传播信息、展示创意的重要媒…

松下的台灯值得入手吗?书客、飞利浦热门品牌横评分享!

自从儿子步入小学&#xff0c;他埋首于书桌前的时光愈发冗长&#xff0c;很欣慰他能够认真专心学习&#xff0c;却也隐隐担忧他的视力健康。在了解视力健康中发现长时间在过暗或过亮的光线环境下学习&#xff0c;会导致瞳孔频繁地收缩与扩张&#xff0c;极易引发视觉疲劳。更令…

Isaac Sim 9 物理(1)

使用Python USD API 来实现 Physics 。 以下内容中&#xff0c;大部分 Python 代码可以在 Physics Python 演示脚本文件中找到&#xff0c;本文仅作为个人学习笔记。 一.设置 USD Stage 和物理场景 Setting up a USD Stage and a Physics Scene USD Stage不知道怎么翻译&#…

开放式耳机怎么选?2024全价位段机型推荐,真人实测不踩雷

作为一位深度测评耳机的专家&#xff0c;我深知对于音乐制作人员而言&#xff0c;优选一副适宜的耳机是至关重要的。我的一位朋友&#xff0c;身为音乐编辑&#xff0c;常常需长时间戴着耳机进行音频编辑与混音。他尝试了众多开放式耳机后&#xff0c;仍未找到完美契合的款式。…

使用 go-control-plane 自定义服务网格控制面

写在前面 阅读本文需要最起码了解envoy相关的概念 本文只是一个类似于demo的测试&#xff0c;只为了学习istio&#xff0c;更好的理解istio中的控制面和数据面&#xff08;pilot -> proxy&#xff09;是如何交互的&#xff0c;下图的蓝色虚线 先说go-control-plane是什么…

安宝特方案 | AR术者培养:AR眼镜如何帮助医生从“看”到“做”?

每一种新药品的上市都需要通过大量的临床试验&#xff0c;而每一种新的手术工具在普及使用之前也需要经过反复的实践和验证。医疗器械公司都面临着这样的挑战&#xff1a;如何促使保守谨慎的医生从仅仅观察新工具在手术中的应用&#xff0c;转变为在实际手术中实操这项工具。安…

简化收支记录,只留关键日期! 一键掌握财务流动,高效管理您的每一笔收支

在繁忙的生活中&#xff0c;管理个人或家庭的财务收支变得尤为重要。然而&#xff0c;传统的记账方式往往繁琐且复杂&#xff0c;让人望而却步。今天&#xff0c;我们为您推荐一款简洁易用的记账神器——晨曦记账本&#xff0c;让您轻松记录收支&#xff0c;只显示日期&#xf…

三种三相交流电动机正反转互锁电路的分析

PLC和固态继电器应用都很普及了&#xff0c;常规电磁继电器还有用武之地吗?答案是&#xff1a;有用武之地的。因为微处理器的应用使逻辑控制发生了变革&#xff0c;极大地发挥了开关功能的特性&#xff0c;但在应用中&#xff0c;它还是无法承受较大的负载&#xff0c;因此还要…

PyTorch的环境配置和安装

PyTorch环境配置及安装 初步机器学习&#xff0c;这里记录下一些学习经过&#xff0c;之后以便于自己查看&#xff0c;同时欢迎各位大佬点评&#xff0c;本节是机器计算的一个包的安装和简单验证。 安装、使用环境 Windows环境下&#xff1a;CUDA官网使用IDM下载就很快乐&am…

3 滑动窗口

滑动窗口是一种常用的数据结构和算法思想&#xff0c;广泛应用于处理数组或序列中的连续片段问题。它的核心特点是窗口的大小可以动态调整&#xff0c;但总保持一个固定大小&#xff0c;通过在序列上“滑动”来检查不同的子序列。以下是滑动窗口的一些典型应用场景&#xff1a;…

帝国cms未审核文章可视化预览效果

有时候为了让编辑更加清楚的看到别人审核之后的效果&#xff0c;同时文章有需要下一级审核才能在前端展示出来&#xff0c;今天就来展示一个未审核文章预览审核后的效果 这次给某出版社开发的时候&#xff0c;他们需要实现编辑能够预览自己发布之后的审核效果&#xff0c;所以就…

想学gis开发,java和c++那个比较好?

ava与C的应用场景不同&#xff0c;究竟选择谁&#xff0c;应该由开发者的兴趣方向来决定。 你选择Java&#xff0c;意味着以后的业务方向就是偏后台服务开发&#xff0c;如果你非得说我用java也可以写界面&#xff0c;对不起&#xff0c;别人不会。 刚好我有一些资料&#xf…

从源码到上线:直播带货系统与短视频商城APP开发全流程

很多人问小编&#xff0c;一个完整的直播带货系统和短视频商城APP是如何从源码开发到最终上线的呢&#xff1f;今天&#xff0c;笔者将详细介绍这一全过程。 一、需求分析与规划 1.市场调研与需求分析&#xff1a;首先需要进行市场调研&#xff0c;了解当前市场的需求和竞争情…

移动端 UI 风格,书写华丽篇章

移动端 UI 风格&#xff0c;书写华丽篇章

电阻代码的谐音助记口诀

整理电子信息的课设&#xff0c;发现当时的笔记&#xff0c;记录一下&#xff0c;时间过得真快啊。 01234黑棕红橙黄 56789绿蓝紫灰白 银色和金色代表误差&#xff0c; 银色百分之十 金色百分之五 可以这么理解&#xff0c;运动会奖牌&#xff0c;金牌比银牌等级高&#xff…