21xrx.com
2025-06-14 19:17:05 Saturday
文章检索 我的文章 写文章
"C++调用SQL开源库介绍"
2023-07-13 13:38:10 深夜i     --     --
C++ SQL 开源库 调用 介绍

C++调用SQL开源库介绍

SQL(Structured Query Language)是一种广泛应用于数据库管理系统的编程语言。在开发过程中,我们通常需要对数据库进行访问和操作,而C++作为一种高效的编程语言,也可以用于编写与数据库交互的程序。

为了更方便地使用C++与数据库交互,一些开源库应运而生,例如MySQL、SQLite、PostgreSQL等,这些库提供了一系列API供我们使用。在这些库中,SQLite是一款轻量级、零配置的数据库,使用方便且具有高度的可移植性,成为很多项目的首选数据库。

下面,我们以SQLite为例,介绍C++如何调用SQL开源库。

1.准备SQLite库文件

首先我们需要从SQLite官网下载相应操作系统下的库文件,例如Windows 64位版本的库文件sqlite3.dll。将该文件放置在工程文件夹中。

2.创建SQLite数据库

通过调用SQL语句,可以在SQLite中创建数据库和表,例如:

#include "sqlite3.h"
#include <iostream>
#include <string>
int main()
{
sqlite3 *db;
int res = sqlite3_open("mydb.db", &db);
if (res) {
   std::cout << "Cannot open the database: " << sqlite3_errmsg(db) << std::endl;
   sqlite3_close(db);
   return -1;
}
std::string sql = "CREATE TABLE Company("
"ID INT PRIMARY KEY NOT NULL,"
"NAME TEXT NOT NULL,"
"AGE INT NOT NULL,"
"ADDRESS CHAR(50),"
"SALARY REAL);";
char *errMsg = nullptr;
res = sqlite3_exec(db, sql.c_str(), nullptr, nullptr, &errMsg);
if (res != SQLITE_OK) {
   std::cout << "Cannot create table: " << errMsg << std::endl;
   sqlite3_free(errMsg);
   sqlite3_close(db);
   return -1;
}
std::cout << "Table created successfully." << std::endl;
sqlite3_close(db);
return 0;
}

上述代码通过调用sqlite3_open函数打开名为“mydb.db”的数据库,如果不存在则会创建一个新的数据库。在数据库中创建一张名为“Company”的表,并定义了一些字段,包括ID、NAME、AGE、ADDRESS和SALARY。这里使用了sqlite3_exec函数执行SQL语句。

3.向SQLite数据库中插入数据

SQLite数据库中插入数据同样可以使用SQL语句,例如:

#include "sqlite3.h"
#include <iostream>
#include <string>
int main()
{
sqlite3 *db;
int res = sqlite3_open("mydb.db", &db);
if (res) {
   std::cout << "Cannot open the database: " << sqlite3_errmsg(db) << std::endl;
   sqlite3_close(db);
   return -1;
}
std::string sql = "INSERT INTO Company(ID, NAME, AGE, ADDRESS, SALARY) "
"VALUES (1, 'John Smith', 32, 'California', 20000.0); ";
char *errMsg = nullptr;
res = sqlite3_exec(db, sql.c_str(), nullptr, nullptr, &errMsg);
if (res != SQLITE_OK) {
   std::cout << "Cannot insert data: " << errMsg << std::endl;
   sqlite3_free(errMsg);
   sqlite3_close(db);
   return -1;
}
std::cout << "Data inserted successfully." << std::endl;
sqlite3_close(db);
return 0;
}

上述代码通过调用SQL语句向“Company”表中插入了一条数据,包括ID、NAME、AGE、ADDRESS和SALARY字段的值。

4.查询SQLite数据库中的数据

通过调用SELECT语句,可以查询SQLite数据库中的数据,例如:

#include "sqlite3.h"
#include <iostream>
#include <string>
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;
int res = sqlite3_open("mydb.db", &db);
if (res) {
   std::cout << "Cannot open the database: " << sqlite3_errmsg(db) << std::endl;
   sqlite3_close(db);
   return -1;
}
std::string sql = "SELECT * FROM Company";
char *errMsg = nullptr;
res = sqlite3_exec(db, sql.c_str(), callback, nullptr, &errMsg);
if (res != SQLITE_OK) {
   std::cout << "Cannot query data: " << errMsg << std::endl;
   sqlite3_free(errMsg);
   sqlite3_close(db);
   return -1;
}
std::cout << "Query data successfully." << std::endl;
sqlite3_close(db);
return 0;
}

上述代码通过调用SELECT语句查询“Company”表中的所有数据,并通过回调函数callback打印每条数据的字段名和字段值。

总结

C++调用SQL开源库是一个相对较为复杂的过程,但是通过上述介绍我们可以发现,SQLite作为一款零配置、轻量级的数据库支持库,其调用过程是非常简便的。合理地利用SQL语言和SQL开源库,可以在开发过程中更加高效地管理和运用多种类型的数据。

  
  

评论区