限时福利领取


在C++项目中操作MySQL数据库时,我们通常会选择MySQL++或MySQL Connector/C++两种库。下面我将分享这两种方式的具体使用方法和常见问题解决方案。

一、使用MySQL++库

MySQL++是对MySQL C API的C++封装,提供了更符合C++习惯的编程接口。

1. 环境配置

Linux系统安装步骤:

  1. 安装MySQL开发库

    sudo yum install mysql-devel
  2. 下载并编译MySQL++源码

    wget http://www.tangentsoft.net/mysql++/releases/mysql++-3.2.2.tar.gz
    tar -zxvf mysql++-3.2.2.tar.gz
    cd mysql++-3.2.2
    ./configure --enable-thread-check --enable-disasm LDFLAGS='-pthread'
    make
    sudo make install
  3. 配置动态库路径

    echo "/usr/local/lib" >> /etc/ld.so.conf
    ldconfig

2. 基础使用示例

#include <mysql++.h>
#include <iostream>

int main() {
    mysqlpp::Connection conn(false);
    if (conn.connect("test", "localhost", "root", "123456")) {
        mysqlpp::Query query = conn.query("SELECT * FROM student");
        if (auto res = query.store()) {
            for (auto it = res.begin(); it != res.end(); ++it) {
                mysqlpp::Row row = *it;
                std::cout << row[0] << " " << row[1] << std::endl;
            }
        }
    }
    return 0;
}

编译时需要链接相关库:

g++ -o demo demo.cpp -lmysqlpp -I/usr/include/mysql

二、使用MySQL Connector/C++

这是MySQL官方提供的C++连接器,遵循JDBC规范。

1. 环境准备

需要先安装Boost库,然后配置VS项目:

  1. 添加头文件包含路径
  2. 设置库文件目录
  3. 添加mysqlcppconn.lib到依赖项
  4. 复制mysqlcppconn.dll到项目目录

2. 基本操作示例

#include <mysql_driver.h>
#include <mysql_connection.h>

int main() {
    sql::mysql::MySQL_Driver *driver;
    sql::Connection *con;

    driver = sql::mysql::get_mysql_driver_instance();
    con = driver->connect("tcp://localhost:3306/test", "root", "123456");

    sql::Statement *stmt = con->createStatement();
    sql::ResultSet *res = stmt->executeQuery("SELECT * FROM student");

    while (res->next()) {
        std::cout << res->getString("name") << std::endl;
    }

    delete res;
    delete stmt;
    delete con;
    return 0;
}

三、常见问题解决

  1. 中文乱码问题

    stmt->execute("set names 'gbk'");
  2. DateTime类型处理

    // 插入当前时间
    CTime now = CTime::GetCurrentTime();
    CString strTime = now.Format("%Y-%m-%d %H:%M:%S");
    prep_stmt->setString(1, strTime.GetString());
  3. 连接失败检查

  4. 确认MySQL服务运行中
  5. 检查用户名密码
  6. 验证网络连接

四、两种方式对比

| 特性 | MySQL++ | Connector/C++ | |------|---------|---------------| | 封装方式 | 封装C API | 遵循JDBC规范 | | 跨平台 | 支持 | 支持 | | 依赖项 | 较少 | 需要Boost | | 易用性 | 较简单 | 类似JDBC |

根据项目需求选择合适的库,小型项目推荐MySQL++,需要与Java代码保持一致的推荐Connector/C++。

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐