如何使用c++连接mySQL数据库

How to connect mySQL database using C++

本文关键字:mySQL 数据库 连接 c++ 何使用      更新时间:2023-10-16

我试图从我的网站连接数据库,并使用c++显示一些行。所以基本上我试图做一个应用程序,从一个表从我的网站数据库的选择查询。现在,这肯定是可能的,因为我见过大量的应用程序这样做。

我该怎么做?有没有人可以举个例子,告诉我应该使用哪些库?

在这里找到:

/* Standard C++ includes */
#include <stdlib.h>
#include <iostream>
/*
  Include directly the different
  headers from cppconn/ and mysql_driver.h + mysql_util.h
  (and mysql_connection.h). This will reduce your build time!
*/
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
using namespace std;
int main(void)
{
cout << endl;
cout << "Running 'SELECT 'Hello World!' »
   AS _message'..." << endl;
try {
  sql::Driver *driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;
  /* Create a connection */
  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
  /* Connect to the MySQL test database */
  con->setSchema("test");
  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT 'Hello World!' AS _message"); // replace with your statement
  while (res->next()) {
    cout << "t... MySQL replies: ";
    /* Access column data by alias or column name */
    cout << res->getString("_message") << endl;
    cout << "t... MySQL says it again: ";
    /* Access column fata by numeric offset, 1 is the first column */
    cout << res->getString(1) << endl;
  }
  delete res;
  delete stmt;
  delete con;
} catch (sql::SQLException &e) {
  cout << "# ERR: SQLException in " << __FILE__;
  cout << "(" << __FUNCTION__ << ") on line " »
     << __LINE__ << endl;
  cout << "# ERR: " << e.what();
  cout << " (MySQL error code: " << e.getErrorCode();
  cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}
cout << endl;
return EXIT_SUCCESS;
}

最后我可以在Ubuntu 12.04中成功地用c++连接器编译一个程序我已经使用以下命令安装了连接器

'apt-get install libmysqlcppconn-dev'

最初我面对同样的问题"未定义引用' get_driver_instance'"来解决这个问题,我声明MySQL_Driver类型的驱动程序实例变量。作为参考,该类型在mysql_driver.h文件中定义。以下是我在程序中使用的代码片段:

sql::mysql::MySQL_Driver *driver;
try {     
    driver = sql::mysql::get_driver_instance();
}
我用-l mysqlcppconn链接器选项 编译程序

,不要忘记包括这个头

#include "mysql_driver.h" 

是的,您将需要mysql c++连接器库。请继续阅读下面的内容,我将解释如何让mysql开发人员给出的示例工作。

注意(和解决方案):IDE: 我尝试使用Visual Studio 2010,但就在几秒钟前得到了这一切的工作,似乎我错过了它在手册中,但它建议使用Visual Studio 2008。我下载并安装了VS2008 Express for c++,按照手册第5章的步骤,错误消失了!它的工作原理。我很高兴,问题解决了。除了如何让它在新版本的visual studio上工作。你应该尝试mysql for visual studio插件,它可能会获得vs2010或更高版本的连接成功。可以从mysql网站

下载

而试图得到上面提到的例子工作,我发现自己在这里由于改变mysql开发网站的困难。我很抱歉写这篇文章作为回答,因为我还不能评论,我会在我发现该怎么做并找到解决方案时编辑这篇文章,以便未来的开发者可以得到帮助。(因为这已经变得如此之大,无论如何都不适合作为评论,哈哈)

@hd1链接到"一个例子"不再工作。在这个链接之后,你会进入到主手册的链接页面。主手册是一个很好的参考,但似乎是相当旧和过时的,和困难的新开发人员,因为我们没有经验,特别是如果我们错过了某个文件,然后添加什么。

@hd1的链接已经移动,并且可以通过删除url组件快速搜索找到,只保留文章名称,这里是无论如何: http://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html

让7.5 MySQL Connector/c++ Complete Example 1工作

下载:

-获取mysql c++连接器,即使它更大,也选择安装包,而不是zip。

-从boost.org获取boost库,因为boost是在mysql c++连接器的connection.h和mysql_connection.h中使用的

现在进行:

-将连接器安装到您的c驱动器,然后转到您的mysql服务器安装文件夹/lib并复制所有libmysql文件,并粘贴到连接器安装文件夹/lib/opt

-将boost库提取到c驱动器

:

从示例(上面的链接,当然也可以复制到一个新的c++项目中)复制代码是可以的。您将注意到错误:

-First: change

cout << "(" << __FUNCTION__ << ") on line " »
 << __LINE__ << endl;

cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;

不知道那个小小的双箭头是什么意思,但我不认为它是c++的一部分

-第二:通过阅读sql手册的第5章来修复它们的其他错误,注意我下面关于第5章的段落

[注1]:第5章使用Microsoft Visual Studio构建MySQL连接器/c++ Windows应用程序如果您遵循本章,使用最新的c++连接器,您可能会看到连接器文件夹中的内容与图像中显示的内容完全不同。无论你是在mysql服务器安装的include和lib文件夹中查找,还是在mysql c++连接器文件夹的include和lib文件夹中查找,它都不会完全匹配,除非他们更新了手册,或者你有一个神奇的下载,但对我来说,它们与2014年3月开始的连接器下载不匹配。

请按照第五章

-但是对于c/c++,通用,附加的包含目录包括你安装的连接器中的" Include "文件夹,而不是服务器安装文件夹

—在执行上述操作的同时,还包括您的boost文件夹,参见

下面的注释2。

和链接器,将军…使用connector/lib/opt

中的opt文件夹

*[注2]*第二次包含需要发生,你需要包括从boost库变体。hpp,这与上面的方法相同,添加从boost zip下载中提取的主文件夹,而不是boost或lib或boostmainfolder/boost中的子文件夹"variant"。将主文件夹作为第二个include

:

接下来我认为是静态构建,好吧,这就是我所做的。跟随它。

然后构建/编译。LNK错误显示(编辑:改变ide到visual studio 2008后消失)。我认为这是因为我应该自己构建连接器(如果你在visual studio 2010中这样做,那么链接错误应该消失),但自周四以来一直在努力让这个工作,将看看我是否有动力在一个良好的睡眠后看到这一点(并且现在完成了:))。

我必须在我的构建中包含-lmysqlcppconn以使其工作