跳到主要内容

纯小白学习c++连接sqlite实现增删改查攻略

1. 前言

起初是一个朋友快大学毕业了,但是啥都还不会,而且他学是嵌入式开发,于是写了这篇教程给他,让他快速上手。

2. 下载Clion Nova 和DataGrip

CLion: A Cross-Platform IDE for C and C++ by JetBrains

DataGrip记得一定要下载最新版!

DataGrip: The Cross-Platform IDE for Databases & SQL by JetBrains

3. 认识数据库

数据库,使用特定结构存放数据的库房。不是什么很厉害的东西,excel也是一种形式的数据库。

数据库查询出来的格式和excel并没有什么不同。

那么sqlite也只是数据库的一种,支持常见的增删改查。而又因为sqlite的特性,存放数据的时候只是一个文件,所以我们可以直接新建一个文件test.sqlite 便是数据库文件,方便后续的操作。

3.1 使用datagrip连接数据库

选择SQLite,

选择刚刚创建的那个文件,然后保存

便已经创建好了连接。展开连接的信息,会发现已经给我们初始化好了一张表

3.2 SQL的增删改查

首先我们需要创建一个新表,提供给我们后面的测试

写一个表名,类似excel的文件名

接着选择Columns, 然后点+ 号,新建列,定义列的数据结构,比如名字,和属性为文本还是数字。

在窗口的最下面会实时生成对应的SQL,供你参考

这里我创建了三个列,id name age

3.3 查询语句

右键新建一个查询窗口

使用语句:select * from Person 查询我们刚刚创建的那个表

  • select 表示查询语法
    • 表示所有列
  • from person 表示我们要查询的表是person表

3.4 增删改

参考这个博客:

SQLite Update 语句 | 菜鸟教程

4. 使用Clion 玩转C++

在打开Clion之后,我们看到的是这样的画面,通过点击new project 新建一个项目。

此时看到右边的内容,选择纠结症就来了,我应该选择什么?

这里直接推荐你选择Meson,为什么?

Meson 是用于自动化构建自由软件,使用Python语言编写,在 Apache 许可证 2.0版本下发布,主要目标是为了让开发者节约用于配置构建系统的时间。

总之就是让你不用操心传统c++构建的繁琐,简化你的开发。

取一个响当当的名字,并且选择type为executable,问就是executable 意味着可执行的程序

创建好之后,Clion竟然提示我们没有安装meson

4.1 安装meson

那我们直接给他安装一个,bing搜索,或者谷歌搜索Meson,一般来说一个就是

前几句话就说明了,应该怎么安装meson

从这里https://github.com/mesonbuild/meson/releases 下载,然后解压在你的工作目录就行

解压后

4.2 配置meson

回到Clion,逐级选择

一定要选择到这个.py文件

能够获取到版本,表示ok

点击保存后,会发现多了个目录,这就是meson正在给你构建项目了。

4.3 第一个C++程序

打开main.cpp,这里已经有一个程序入口,点击运行

awsome!第一个C++程序就搞定了!

5. C++连接sqlite

5.1 引入依赖

写代码之前需要干嘛,当然是把连接sqlite的依赖加到项目中。

打开你的meson.build 文件,照着下面的改改

project('sqlite-learning', 'cpp',
version : '1.0.0',
default_options : ['warning_level=3', 'cpp_std=c++17'])

# Set up dependencies
sqlite_dep = dependency('sqlite3')

# Compile the program
sqlite_learning = executable('sqlite_learning', 'main.cpp', install : true, dependencies : sqlite_dep)

  • sqlite_dep = dependency('sqlite3')dependencies : sqlite_dep 表示引入sqlite3的依赖

5.2 开始编写代码

回到main.cpp 文件,本身我对c++语法并不熟悉,但是没关系,现在有AI了,可以让AI输出,然后咱们边抄边学。

比如这样:

接着一键复制,改改文件名

5.3 代码部分

main.cpp

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

int main() {
// 打开数据库连接
sqlite3* db;
int rc = sqlite3_open("/Users/asher/Desktop/temp/test.sqlite", &db);
if (rc != SQLITE_OK) {
std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
return rc;
}

// 创建表
const char* createTableQuery = "CREATE TABLE IF NOT EXISTS employees (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
rc = sqlite3_exec(db, createTableQuery, 0, 0, 0);
if (rc != SQLITE_OK) {
std::cerr << "无法创建表: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return rc;
}

// 插入数据
const char* insertQuery = "INSERT INTO employees (id, name, age) VALUES (1, 'John Doe', 30)";
rc = sqlite3_exec(db, insertQuery, 0, 0, 0);
if (rc != SQLITE_OK) {
std::cerr << "无法插入数据: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return rc;
}

// 查询数据
const char* selectQuery = "SELECT * FROM employees";
sqlite3_stmt* stmt;
rc = sqlite3_prepare_v2(db, selectQuery, -1, &stmt, 0);
if (rc != SQLITE_OK) {
std::cerr << "无法准备查询: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return rc;
}

// 遍历结果集
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const unsigned char* name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
std::cout << "ID: " << id << ", Name: " << name << ", Age: " << age << std::endl;
}

// 释放资源
sqlite3_finalize(stmt);
sqlite3_close(db);

return 0;
}

直接运行!完全没得问题

回到datagrip刷新试试

哇!表有了,数据也有了

6. 最后一步

让AI讲解他刚刚输出的代码,并且不依靠AI也能写出来时,才能融会贯通。