返回

C++ 轻松连接 DBMS:MySQL 和 SQLite 终极指南

mysql

C++ 连接 DBMS 的终极指南

简介

在现代应用程序开发中,将 C++ 与数据库管理系统(DBMS)集成是至关重要的。这篇文章将深入探讨如何建立这种连接,重点关注流行的 DBMS MySQL 和 SQLite。通过这些步骤,你可以轻松地存储、检索和管理持久化数据,从而增强应用程序的功能。

建立连接

1. 安装 DBMS

在进行任何连接之前,确保已安装 MySQL 或 SQLite。请参阅特定平台的安装说明。

2. 初始化连接

MySQL

使用 MySQL Connector/C++ 库初始化 MySQL 连接:

  • 在项目中包含 <mysql.h> 头文件
  • 使用 mysql_init(NULL) 初始化连接

SQLite

使用 SQLite3 库初始化 SQLite 连接:

  • 在项目中包含 <sqlite3.h> 头文件
  • 使用 sqlite3_open(db_name, &db) 打开数据库

执行查询

MySQL

  • 使用 mysql_query(conn, "SELECT * FROM table_name") 执行查询

SQLite

  • 使用 sqlite3_prepare_v2(db, "SELECT * FROM table_name", -1, &stmt, NULL) 准备查询
  • 使用 sqlite3_step(stmt) 执行查询

处理结果

MySQL

  • 使用 mysql_fetch_row() 函数获取查询结果

SQLite

  • 使用 sqlite3_column_text() 函数访问查询结果

关闭连接

MySQL

  • 使用 mysql_close(conn) 关闭连接

SQLite

  • 使用 sqlite3_close(db) 关闭连接

示例代码

// MySQL
MYSQL *conn = mysql_init(NULL);
mysql_options(conn, MYSQL_OPT_HOST, "localhost");
mysql_options(conn, MYSQL_OPT_USER, "root");
mysql_options(conn, MYSQL_OPT_PASSWORD, "password");
mysql_options(conn, MYSQL_OPT_DATABASE, "db_name");

if (mysql_real_connect(conn, NULL, NULL, NULL, NULL, 0, NULL, 0) == NULL) {
    // 处理连接错误
}

MYSQL_RES *res = mysql_query(conn, "SELECT * FROM table_name");
MYSQL_ROW row;
while ((row = mysql_fetch_row(res)) != NULL) {
    // 访问查询结果
}

mysql_close(conn);

// SQLite
sqlite3 *db;
if (sqlite3_open("db_name", &db) != SQLITE_OK) {
    // 处理数据库打开错误
}

sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, "SELECT * FROM table_name", -1, &stmt, NULL) != SQLITE_OK) {
    // 处理查询准备错误
}
sqlite3_step(stmt);
const char *text = sqlite3_column_text(stmt, 0);
// 访问查询结果

sqlite3_finalize(stmt);
sqlite3_close(db);

常见问题解答

  1. 我无法连接到 MySQL,出现 <mysql.h> 无法识别错误。
    确保已正确安装 MySQL Connector/C++ 库。

  2. 我无法执行查询,出现 "undefined reference" 错误。
    确保已正确链接到 MySQL Connector/C++ 库。

  3. 我无法打开 SQLite 数据库,出现 "no such file or directory" 错误。
    确保 SQLite 数据库存在于指定路径。

  4. 我无法访问查询结果,出现 "segmentation fault" 错误。
    确保在访问结果前已检查其有效性(不为 NULL)。

  5. 我的应用程序在使用 DBMS 时崩溃。
    检查连接句柄或语句句柄是否正确初始化和关闭。