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

使用MySQL C++ Connector8 JDBC无法连接本地MySQL,求助

解决MySQL C++ Connector8 JDBC API连接本地MySQL失败的问题

问题描述

可通过终端命令mysql -uroot -p123456正常连接本地MySQL,但使用MySQL C++ Connector8 JDBC API时连接失败,报错信息为unable to connect to localhost,相关代码如下:

driver = sql::mysql::get_driver_instance();
try {
    // con = driver->connect(connection, username, password);
     con = driver->connect("tcp://127.0.0.1:3306", "root", "123456");
}
catch (sql::SQLException e) {
    std::cout << e.what();
}

con->setSchema("mydb");

解决方案

  • 确认MySQL是否开启TCP/IP监听
    在终端执行netstat -an | grep 3306,查看输出是否包含0.0.0.0:3306或127.0.0.1:3306。若仅显示Unix套接字(如/tmp/mysql.sock相关内容),说明MySQL未启用TCP连接:

    1. 打开MySQL配置文件my.cnf(Linux)或my.ini(Windows)
    2. 将bind-address设置为127.0.0.1,并确保skip-networking配置项被注释
    3. 重启MySQL服务
  • 验证连接字符串格式
    确认连接字符串"tcp://127.0.0.1:3306"符合Connector8的要求,也可尝试替换为"localhost:3306"测试是否能正常连接。

  • 检查用户TCP连接权限
    终端登录MySQL后执行以下命令,查看root用户的授权主机:

    SELECT user,host FROM mysql.user WHERE user='root';
    

    若root用户的host字段仅为localhost,则仅允许套接字连接,需为127.0.0.1单独授权:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456';
    FLUSH PRIVILEGES;
    
  • 修复空指针异常风险
    当前代码在连接失败时,con会为空指针,后续调用con->setSchema("mydb")会触发崩溃,需增加空指针判断:

    driver = sql::mysql::get_driver_instance();
    sql::Connection* con = nullptr;
    try {
        con = driver->connect("tcp://127.0.0.1:3306", "root", "123456");
        if (con != nullptr) {
            con->setSchema("mydb");
            // 执行后续数据库操作
        }
    } catch (sql::SQLException &e) { // 使用引用避免异常对象拷贝
        std::cout << "连接错误详情: " << e.what() << " 错误码: " << e.getErrorCode() << std::endl;
    }
    // 释放连接资源
    if (con != nullptr) {
        delete con;
    }
    
  • 检查版本兼容性
    确保MySQL C++ Connector8的版本与本地MySQL服务器版本匹配,大版本不一致可能引发连接兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:20