心怀梦想的咸鱼 2024-05-29 10:39 采纳率: 0%
浏览 45

在win10平台下MySQL Connector/C++的使用错误

使用第三方库MySQL Connector/C++是啊比
系统是win10,编译器是visual studio2022
测试代码如下

#include <jdbc/cppconn/statement.h>
#include <jdbc/cppconn/resultset.h>
#include <jdbc/cppconn/exception.h>
#include "jdbc/mysql_driver.h"
#include<windows.h>

int main() {
    std::string sql1 = "create database testmysql";//sql1用于创建testmysql数据库
    SetConsoleOutputCP(CP_UTF8);
    try
    {
        // 注册MySQL驱动程序
        sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance();
        sql::Connection* con;
        sql::Statement* stmt;
        sql::ResultSet* res;
        //获取数据库连接对象
        con = driver->connect("tcp://localhost:3306", "root", "123456");
        //获取执行语句对象
        stmt = con->createStatement();
        stmt->execute(sql1);
        delete stmt;
        delete con;
    }
    catch (sql::SQLException& sqle)
    {
        std::cout << "数据库连接出错" << std::endl;
    }
    return 0;
}

设置属性

img


vc目录下的库目录为:C:\mysql-connector-c++-8.4.0-winx64-debug\mysql-connector-c++-8.4.0-winx64\lib64\vs14;C:\mysql-connector-c++-8.4.0-winx64-debug\mysql-connector-c++-8.4.0-winx64\lib64\vs14\debug;$(LibraryPath)
C/C++的库目录为C:\mysql-connector-c++-8.4.0-winx64-debug\mysql-connector-c++-8.4.0-winx64\include
链接器附加依赖项为
mysqlcppconn.lib
mysqlcppconn8.lib
但是运行后报错

img

不知道,哪里错了,有什么遗漏。

展开全部

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-29 10:39
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,看起来您的问题是关于如何正确地在Windows 10上使用Visual Studio 2022与MySQL Connector/C++进行开发。从错误信息来看,程序崩溃可能是由于缺少必要的运行时库或者链接错误导致的。

    首先,确保您已经按照官方文档安装了MySQL Connector/C++的开发包,并且包含了正确的库和头文件路径。根据您提供的截图,似乎已经设置了包含目录和库目录,但为了保险起见,请检查以下几点:

    1. 确保安装了正确的版本(对于x64平台,选择64位版本)并添加到系统PATH环境变量中,以便链接器能找到相关动态链接库。

    2. 检查是否已将库目录添加到了项目的链接器选项中。您提到的链接器附加依赖项包括mysqlcppconn.libmysqlcppconn8.lib,确保这两个库文件确实存在于指定的路径下。

    3. 如果您是在调试模式下运行程序,记得添加调试版本的库,例如mysqlcppconn8d.liblibmysql.dll(通常位于C:\mysql-connector-c++-8.4.0-winx64-debug\mysql-connector-c++-8.4.0-winx64\lib64\vs14\debug目录下)。

    4. 您可能还需要添加一些额外的链接器选项,比如-lws2_32,这有助于解决与Winsock相关的链接问题。

    下面是针对这些问题的一些建议:

    **第一步:**确认库文件位置

    确保在以下两个地方添加正确的库路径:

    1. 在项目属性的“链接器” -> “一般” -> “附加库目录”中添加:

      C:\mysql-connector-c++-8.4.0-winx64-debug\mysql-connector-c++-8.4.0-winx64\lib64\vs14
      C:\mysql-connector-c++-8.4.0-winx64-debug\mysql-connector-c++-8.4.0-winx64\lib64\vs14\debug
      
    2. 在项目属性的“链接器” -> “输入” -> “附加依赖项”中添加:

      mysqlcppconn.lib
      mysqlcppconn8.lib
      ws2_32.lib
      

    **第二步:**检查编译选项

    确保在C/C++的“预处理器”部分添加了必要的宏定义,比如:

    MYSQLCPPCONN_USE_DLL
    

    **第三步:**运行时库

    确保在C/C++的“代码生成” -> “运行时库”中选择了正确的运行时库,对于调试模式应该是“多线程调试DLL”。

    **第四步:**重新构建项目

    保存以上更改后,清理解决方案然后重建项目,看看问题是否仍然存在。

    如果您遵循了上述步骤,应该可以成功编译并运行您的代码。如果问题依然存在,请提供详细的错误消息,以便进一步排查。

    展开全部

    评论 编辑记录
  • 阿里嘎多学长 2024-05-29 10:39
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的信息,您在使用Visual Studio 2022和win10平台下,尝试使用MySQL Connector/C++库时遇到了编译错误。下面是一些可能的解决方案:

    1. 检查包含目录和库目录

    确保您的项目属性中的包含目录和库目录设置正确。根据您提供的截图,您的设置看起来是正确的,但请再次确认路径没有错误,并且与您的Visual Studio版本相匹配(例如,vs14对应Visual Studio 2015,您使用的是Visual Studio 2022,可能需要调整为对应的版本目录)。

    2. 链接器附加依赖项

    您已经设置了mysqlcppconn.libmysqlcppconn8.lib作为链接器的附加依赖项。请确保这些库文件实际存在于指定的库目录中。

    3. 检查头文件包含

    您的代码中包含了<jdbc/cppconn/statement.h>等头文件,但MySQL Connector/C++的官方文档通常推荐包含<mysql_connection.h>等更具体的头文件。请尝试使用官方推荐的头文件,并确保它们在包含目录中。

    4. 使用正确的命名空间和类

    您的代码中使用了sql::mysql::MySQL_Driver等类,但根据MySQL Connector/C++的文档,您可能需要使用sql::mysql::MySQL_Driversql::DriverManager::getDriverInstance()来获取驱动程序实例。

    5. 检查程序逻辑

    您的代码在创建数据库连接后立即执行SQL语句,但没有检查连接是否成功建立。建议添加适当的错误处理逻辑来确保连接成功。

    6. 运行时错误

    "abort() has been called"通常表明程序遇到了严重错误。这可能是由于多种原因造成的,包括但不限于内存访问错误、无效的输入参数等。您可能需要使用调试器来确定确切的错误原因。

    7. 参考资料

    示例代码

    以下是使用MySQL Connector/C++的一个基本示例,您可以根据这个示例调整您的代码:

    #include <mysql_connection.h>
    #include <cppconn/prepared_statement.h>
    #include <cppconn/resultset.h>
    #include <cppconn/statement.h>
    #include <cppconn/exception.h>
    #include <iostream>
    
    int main() {
        try {
            sql::Driver *driver;
            sql::Connection *con;
            sql::Statement *stmt;
            sql::ResultSet *res;
    
            driver = sql::mysql::get_driver_instance();
            con = driver->connect("tcp://127.0.0.1:3306", "root", "password");
    
            // 创建数据库
            stmt = con->createStatement();
            stmt->execute("CREATE DATABASE IF NOT EXISTS testmysql");
            delete stmt;
    
            con->close();
            delete con;
        } catch (sql::SQLException &e) {
            std::cerr << "# ERR: SQLException in " << __FILE__;
            std::cerr << "(" << __FUNCTION__ << ") on line " << __LINE__ << std::endl;
            std::cerr << "# ERR: " << e.what();
            std::cerr << " (MySQL error code: " << e.getErrorCode();
            std::cerr << ", SQLState: " << e.getSQLState() << " )" << std::endl;
        }
    
        return 0;
    }
    

    请注意,您需要根据您的具体情况调整示例代码中的数据库连接信息和错误处理逻辑。希望这些信息能帮助您解决问题。

    展开全部

    评论 编辑记录
  • MinX_Yu 2024-05-30 07:22
    关注

    点击重试,然后程序会跳转到报错的那一行。具体的信息是什么?

    评论
编辑
预览

报告相同问题?

问题事件

  • 创建了问题 5月29日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部