纯小白学习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 增删改
参考这个博客:
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也能写出来时,才能融会贯通。