You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统下如何将MySQL数据库连接到C++程序?

Linux下C++连接MySQL的完整解决方案

作为经常帮人解决C连接MySQL问题的开发者,我太懂你这种从Java转过来的困惑了——Java里JDBC一套流程走下来顺得很,C这边却要跟系统库、编译链接打交道,确实容易卡壳。咱们一步步来解决你的问题:

第一步:先搞定依赖库安装

C不像Java那样直接引入Jar包就能用,你得先安装MySQL官方的C驱动库。根据你的Linux发行版选对应的命令:

  • Ubuntu/Debian系:
    sudo apt-get update && sudo apt-get install libmysqlcppconn-dev
    
  • CentOS/RHEL系:
    sudo yum install mysql-connector-c++-devel
    

第二步:用正确的代码模板(解决你遇到的get_mysql_driver_错误)

你遇到的错误大概率是因为头文件没引对,或者用了过时的API。下面是经过验证的基础连接代码,替换掉你的用户名、密码和数据库名就能用:

#include <iostream>
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/statement.h>
#include <cppconn/resultset.h>

using namespace std;
using namespace sql;
using namespace sql::mysql;

int main() {
    try {
        // 获取驱动实例(注意函数名是get_mysql_driver_instance,别拼错)
        Driver* driver = get_mysql_driver_instance();
        // 建立TCP连接,localhost也可以换成你的MySQL服务器IP
        Connection* con = driver->connect("tcp://127.0.0.1:3306", "your_username", "your_password");
        // 切换到目标数据库
        con->setSchema("your_database_name");

        // 创建查询语句
        Statement* stmt = con->createStatement();
        ResultSet* res = stmt->executeQuery("SELECT * FROM your_table");

        // 遍历结果集
        while (res->next()) {
            // 这里替换成你表中的字段名
            cout << "ID: " << res->getInt("id") << ", 名称: " << res->getString("name") << endl;
        }

        // 记得释放资源,C++没有自动GC哦
        delete res;
        delete stmt;
        delete con;
    } catch (SQLException& e) {
        // 捕获SQL异常,方便排查问题
        cout << "SQL错误信息: " << e.what() << endl;
        cout << "错误码: " << e.getErrorCode() << endl;
    }

    return 0;
}

第三步:关键!编译时必须链接驱动库

这是很多新手容易踩的坑:C编译时需要明确告诉编译器要链接MySQL的C驱动库,否则会出现“未定义引用”之类的错误(包括你遇到的get_mysql_driver_相关错误)。

假设你的代码文件名叫db_connect.cpp,编译命令是:

g++ db_connect.cpp -o db_connect -lmysqlcppconn

这里的-lmysqlcppconn就是告诉编译器链接MySQL C++驱动库的关键参数。

为什么Java里没这么麻烦?

简单说,Java的JDBC是通过Jar包封装了底层调用,运行时自动加载驱动;而C++是直接调用系统级的库文件,必须在编译阶段就把库链接进去,还要确保头文件路径正确——这也是两种语言生态的差异,习惯就好啦。

额外排查要点

如果还是不行,可以检查这几点:

  • 确认MySQL服务正在运行:sudo systemctl status mysql
  • 确认你的MySQL用户名密码有访问目标数据库的权限
  • 检查防火墙是否放行3306端口(如果是远程连接的话)
  • 确保驱动版本和MySQL版本匹配(比如MySQL 8.0建议用对应版本的cppconn驱动)

内容的提问来源于stack exchange,提问作者badProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:59:39