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

时间:2013-05-07 17:12:39

标签: c++ mysql

我正在尝试从我的网站连接数据库并使用C ++显示一些行。 所以基本上我正在尝试创建一个应用程序,从我的站点数据库中的表中执行选择查询。现在,这必须是可能的,因为我已经看到大量应用程序在做这件事。

我该怎么做?有人可以举例说明我应该使用哪些库吗?

4 个答案:

答案 0 :(得分:30)

找到here

/* 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;
}

答案 1 :(得分:9)

最后,我可以在Ubuntu 12.04中使用C ++连接器成功编译程序 我已使用此命令

安装了连接器
'apt-get install libmysqlcppconn-dev'

最初我遇到了同样的问题&#34;对`get_driver_instance&#39;的未定义引用&#34;为了解决这个问题,我声明了MySQL_Driver类型的驱动程序实例变量。对于准备参考,此类型在mysql_driver.h文件中定义。这是我在程序中使用的代码片段。

sql::mysql::MySQL_Driver *driver;
try {     
    driver = sql::mysql::get_driver_instance();
}

我用-l mysqlcppconn链接器选项

编译了程序

并且不要忘记包含此标题

#include "mysql_driver.h" 

答案 2 :(得分:6)

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

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

虽然试图让上面提到的例子起作用,但我发现自己因为mysql开发网站的变化而遇到了困难。我为写这个作为答案而道歉,因为我还没有发表评论,并且会在我发现该做什么并找到解决方案时对其进行编辑,以便未来的开发人员可以得到帮助。(因为这已经变得如此之大不管怎么说,它还不适合作为评论,哈哈)

@ hd1链接到&#34;一个例子&#34;不再有效。在链接之后,最终会在页面上显示链接到主要手册的页面。主要手册是一个很好的参考,但似乎相当陈旧和过时,新开发人员很难,因为我们没有经验,特别是如果我们丢失某个文件,然后添加什么。

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

获取7.5 MySQL Connector / C ++完成示例1工作

下载:

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

- 从boost.org获取boost库,因为boost用于connection.h,mysql_connection.h来自mysql c ++连接器

现在继续:

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

- 将增强库提取到c盘

下一步:

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

- 首先:改变

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

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

不确定那个微小的双箭头是什么,但我不认为它是c ++的一部分

- 第二:通过阅读Chapter 5 of the sql manual修正其他错误,请注意我关于下文第5章的段落

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

请遵循第5章

-But for c / c ++,General,Additional Include Directories包括&#34; include&#34;来自您安装的连接器的文件夹,而不是服务器安装文件夹

- 在执行上述操作时,还包括您的boost文件夹,请参阅下面的注释2

- 对于Linker,General ..等使用connector / lib / opt

中的opt文件夹

* [注2] *第二个包括需要发生,你需要包括来自boost库variant.hpp, 这与上面相同,添加你从boost zip下载中提取的主文件夹,而不是boost或lib或子文件夹&#34; variant&#34;发现在boostmainfolder / boost ..只是主文件夹作为第二个包括

下一步:

接下来我认为静态构建是什么,这正是我所做的。跟着它。

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

答案 3 :(得分:3)

我必须在构建中包含-lmysqlcppconn才能使其正常工作。