C++与SQLite3联合打造实用的应用程序
SQLite是一个轻量级的嵌入式数据库引擎,在C++ 中使用SQLite需要包含SQLite的头文件并链接相应的库。以下是一个在C++ 中使用SQLite的基本示例:
一. 环境搭建
首先需要下载SQLite库。可以从SQLite官方网站(https://sqlite.org/download.html)下载预编译的二进制文件或者源代码。
在C++ 项目中,需要包含SQLite的头文件路径(如果是源代码安装,头文件通常在 sqlite - source - dir/include 目录下),并且链接SQLite库(如果是预编译二进制文件,在Windows下可能是 sqlite3.dll,在Linux下可能是 libsqlite3.so,在编译时需要指定库文件的路径和名称)。
二. 创建数据库和表
以下是一个简单的C++ 程序,用于创建一个SQLite数据库并在其中创建一个表:
#include <iostream> #include <sqlite3.h> int main() { sqlite3 *db; char *errMsg = 0; int rc = sqlite3_open("test.db", &db); if (rc!= SQLITE_OK) { std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl; sqlite3_close(db); return 1; } const char *sql = "CREATE TABLE IF NOT EXISTS users(" "id INTEGER PRIMARY KEY AUTOINCREMENT," "name TEXT NOT NULL," "age INTEGER);"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc!= SQLITE_OK) { std::cerr << "SQL error: " << errMsg << std::endl; sqlite3_free(errMsg); sqlite3_close(db); return 1; } sqlite3_close(db); return 0; }
在这个示例中:
首先使用 sqlite3_open 函数打开(如果不存在则创建)一个名为 test.db 的数据库文件,并获取一个数据库连接对象 db。
然后定义一个SQL语句,用于创建一个名为 users 的表,表中包含 id(自增整数主键)、name(非空文本)和 age(整数)三个字段。
使用 sqlite3_exec 函数执行SQL语句,如果执行过程中出现错误,通过 errMsg 获取错误信息并输出。
最后使用 sqlite3_close 函数关闭数据库连接。
三. 插入数据
以下是一个向 users 表中插入数据的示例:
#include <iostream> #include <sqlite3.h> int main() { sqlite3 *db; char *errMsg = 0; int rc = sqlite3_open("test.db", &db); if (rc!= SQLITE_OK) { std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl; sqlite3_close(db); return 1; } const char *sql = "INSERT INTO users (name, age) VALUES ('John', 25);"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc!= SQLITE_OK) { std::cerr << "SQL error: " << errMsg << std::endl; sqlite3_free(errMsg); sqlite3_close(db); return 1; } sqlite3_close(db); return 0; }
这里定义了一个SQL插入语句,将名为 John,年龄为25的用户信息插入到 users 表中。
四. 查询数据
以下是一个查询 users 表中数据的示例:
#include <iostream> #include <sqlite3.h> static int callback(void *data, int argc, char argv, char azColName) { for (int i = 0; i < argc; i++) { std::cout << azColName[i] << " = " << argv[i]? argv[i] : "NULL" << std::endl; } std::cout << std::endl; return 0; } int main() { sqlite3 *db; char *errMsg = 0; int rc = sqlite3_open("test.db", &db); if (rc!= SQLITE_OK) { std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl; sqlite3_close(db); return 1; } const char *sql = "SELECT * FROM users;"; rc = sqlite3_exec(db, sql, callback, 0, &errMsg); if (rc!= SQLITE_OK) { std::cerr << "SQL error: " << errMsg << std::endl; sqlite3_free(errMsg); sqlite3_close(db); return 1; } sqlite3_close(db); return 0; }
在这个示例中:
定义了一个回调函数 callback,当查询到数据时,这个函数会被调用,用于处理每一行查询结果。
使用 sqlite3_exec 函数执行查询语句,将 callback 函数作为参数传递,这样查询到的每一行数据都会调用 callback 函数进行处理。
C++编程语言基础
- C++:从入门到工作的教程
- 这是我的第一个 C++程序!
- C++中main函数有什么作用?
- C++中 #include 指令的作用
- C++中常用的预处理指令
- C++中 iostream 头文件定义了什么
- C++名称空间(namespace)
- C++标准库中 std 命名空间定义了些什么
- C++常用的头文件
- C++源代码的发布方式
- C++变量名的定义、变量的作用、使用规范
- C++的关键字列表
- C++数据类型:整型(整数类型)
- 二进制补码、原码、反码
- C++数据类型:char字符型(整数类型)
- ASCII码表及C++字符函数库(cctype)
- 计算机汉字编码
- C++数据类型:bool类型(整数类型)
- C++中 const 限定符
- C++数据类型:浮点数
- C++运算符:算术运算符
- C++运算符:类型转换规则
- 计算机数据存储大小端模式
- C++运算符:位运算 与 bitset类库
- C++运算符:关系运算符与逻辑运算符
- C++流程控制:顺序、选择、循环、跳转语句
- C++函数的定义、参数传递、重载、嵌套
- C++数组:一维、二维、多维数组的运用
- C-style字符串、库函数 与 std::string对象
- C++数据类型:结构体(struct)
- C++数据类型:联合体(union)
- C++数据类型:枚举(enum)
- C++数据类型别名:typedef
- C++指针
- C++内存操作符:new分配 与 delete释放
- C++标准模板库(STL)容器、算法、迭代器
- C++标准模板库(STL)vector顺序容器
- C++标准模板库(STL)array固定容器
- C++标准模板库(STL)list双向链表容器
- C++标准模板库(STL)deque双端队列
- C++标准模板库(STL)集合 set 关联容器
- C++标准模板库(STL)map关联容器
- C++标准模板库(STL)unordered_set
- C++标准模板库(STL)unordered_map
- C++标准模板库(STL)algorithm算法库
- C++文件操作
- C++数学库(cmath)数学常量与数学函数
- C++模板:函数模板、类模板
- C++与SQLite3联合打造实用的应用程序
- C++实战开发中常用的库(概述)
- 第二部分:C++面向对象编程
- C++:类的定义与声明、类对象应用
- 第三部分:数据结构与算法(概述)
- 第一部分:C++语言简介与学习路线