下午好!我有一个用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;
}
我找了一些问题,但找不到有用的东西。
1条答案
按热度按时间eqqqjvef1#
使用CMake怎么样?您可以轻松地将外部库链接到目标可执行文件中。
最重要的是,它在vscode上是否得到了
CMake tools
扩展的完美支持。