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
相关产品推荐
相关产品推荐

