以下以SQLite数据库为例,展示在C++中使用SQLite库来执行查询、插入、更新和删除数据的操作示例代码。
首先确保你已经安装了SQLite库,并且在C++项目中包含了相关的头文件。
#include <iostream>
#include <sqlite3.h>
#include <string>
// 回调函数,用于查询结果处理
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
for (int i = 0; i < argc; i++) {
std::cout << azColName[i] << " = " << (argv[i]? argv[i] : "NULL") << " ";
}
std::cout << std::endl;
return 0;
}
int main() {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
// 打开数据库
rc = sqlite3_open("test.db", &db);
if (rc) {
std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
return(0);
} else {
std::cout << "Opened database successfully" << std::endl;
}
// 创建表
const char *sql = "CREATE TABLE IF NOT EXISTS COMPANY("
"ID INT PRIMARY KEY NOT NULL,"
"NAME TEXT NOT NULL,"
"AGE INT NOT NULL,"
"ADDRESS CHAR(50),"
"SALARY REAL);";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Table created successfully" << std::endl;
}
// 插入数据
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); ";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Records created successfully" << std::endl;
}
// 查询数据
sql = "SELECT * from COMPANY;";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Operation done successfully" << std::endl;
}
// 更新数据
sql = "UPDATE COMPANY set SALARY = 25000.00 where ID = 1;";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Record updated successfully" << std::endl;
}
// 再次查询数据,查看更新结果
sql = "SELECT * from COMPANY;";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Operation done successfully" << std::endl;
}
// 删除数据
sql = "DELETE from COMPANY where ID = 2;";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Record deleted successfully" << std::endl;
}
// 再次查询数据,查看删除结果
sql = "SELECT * from COMPANY;";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Operation done successfully" << std::endl;
}
// 关闭数据库
sqlite3_close(db);
return 0;
}
上述代码实现了以下功能:
1. 打开SQLite数据库。
2. 创建一个名为 COMPANY 的表。
3. 向表中插入多条记录。
4. 查询表中的所有记录并输出结果。
5. 更新表中一条记录的 SALARY 字段。
6. 再次查询表中所有记录,查看更新结果。
7. 删除表中一条记录。
8. 最后再次查询表中所有记录,查看删除结果。
9. 关闭数据库连接。