mysql 在Visual Studio代码中使用C++链接外部库

bgtovc5b  于 2022-12-10  发布在  Mysql
关注(0)|答案(1)|浏览(152)

下午好!我有一个用C++编写的程序,在VS代码中。该程序从一个名为Student的表中读取所有数据。我用命令g++ retrieveDataFromTable.cpp -I "C:\Program Files\MySQL\MySQL Server 8.0\include" -L "C:\Program Files\MySQL\MySQL Server 8.0\lib" -l mysql -o test编译了这个程序,它得到了完美的编译。这是我第一次在我的程序中使用外部库。所以,我看了一些关于链接如何工作的视频,以及如何将外部库添加到我们的程序中。基本上,在那些视频中,他们使用Visual Studio或代码块来添加库,但我使用的是VS代码。最终,我设法让这个程序发挥了作用,但我有几个问题。第一个是关于我包含头文件“mysql.h”的方式。我的意思是它看起来不专业。如果我在其他设备上运行这个程序,当然就没有任何意义了。那么,有没有人愿意帮助我,我可以让它变得更好?我的第二个问题是,如果我的项目文件夹中没有libmysql.dll,程序将终止。我猜这是因为我做了与库的动态链接(如果我错了,请纠正我)。有谁知道我如何静态地链接这个特定的库?总而言之,如果有人能给我一些建议,关于我如何改进这个项目,以及我应该学习关于这类事情的知识,我会非常感激。(谢谢)

#include <iostream>
#include "C:/Program Files/MySQL/MySQL Server 8.0/include/mysql.h"

struct CONNECTION
{
    const char *server = "localhost";
    const char *user = "root";
    const char *password = "password";
    const char *database = "project";
};

MYSQL *connection_to_database(CONNECTION connection)
{
    MYSQL *newConnection = mysql_init(NULL);
    if (!newConnection)
    {
        std::cout << "Failed to create an object" << std::endl;
        std::cout << mysql_error(newConnection) << std::endl;
        exit(0);
    }
    if (!mysql_real_connect(newConnection, connection.server, connection.user,
                            connection.password, connection.database, 3306, NULL, 0))
    {
        std::cout << "Failed to connect to database:" << std::endl;
        std::cout << mysql_error(newConnection) << std::endl;
        exit(0);
    }
    return newConnection;
}

MYSQL_RES *execute_query(MYSQL *connection, const std::string query)
{
    if (mysql_query(connection, query.c_str()))
    {
        std::cout << "MYSQL query error:\n"
                  << mysql_error(connection) << std::endl;
        exit(0);
    }
    return mysql_store_result(connection);
}

int main()
{
    CONNECTION id;
    MYSQL* connection = connection_to_database(id);
    MYSQL_RES* res = execute_query(connection, "SELECT * FROM students");
    
    int rows = mysql_affected_rows(connection);
    std::cout << rows << " rows were affected" << std::endl;

    int columns = mysql_num_fields(res);
    std::cout << columns << " columns in the table" << std::endl;

    MYSQL_ROW row;
    while((row = mysql_fetch_row(res)))
    {
        for (int i = 0; i < columns; i++){
            std::cout << row[i] << " ";
        }
        std::cin.get();
    }

    return 0;
}

我找了一些问题,但找不到有用的东西。

eqqqjvef

eqqqjvef1#

使用CMake怎么样?您可以轻松地将外部库链接到目标可执行文件中。
最重要的是,它在vscode上是否得到了CMake tools扩展的完美支持。

相关问题