我正在尝试将MySQL数据库连接到我的c ++ Win32项目上学。我已经完成了Visual Studio的设置,正如我的教授告诉我的那样,所有包含文件和目录,这就是她在安装MySQL和连接器后告诉我这样做的方式:


Windows Visual Studio


1)如果您使用Microsoft Visual Studio作为c ++编辑器。
一种。转到解决方案资源管理器,然后右键单击该项目,然后找到
项目属性。在配置属性中,找到C / C ++和
单击常规,然后在
通过键入这三个的头文件的目录右框架
库,例如MySQL Server 5.5的include目录,
包括MySQL Connector C ++ 1.1.3的目录和该目录
Boost 1.55.0。
b。在“项目属性”图的树形视图中,打开“链接器”,
一般,其他图书馆目录。添加$ {MySQL} / lib / opt
目录到“其他库目录”文本字段中,并添加$
将{MySQL_Connector} / lib目录添加到附加库中
目录文本字段。

之后,我进行了编译,一切都很好,然后我添加了用于建立连接的代码,该代码位于按钮click的事件处理程序中。我的#include语句如下所示:

#include "stdafx.h"
#include "AddBook.h"
#include "afxdialogex.h"
#include "resource.h"
#include <windows.system.h>
#include <mysql.h>

#include <mysql_connection.h>
#include <mysql_driver.h>

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

using namespace std;
using namespace sql;
using namespace sql::mysql;


因此,她的连接示例如下(带有上述所有包含文件):

int main(void)
{
    //cout << endl;
    //cout << "Running 'SELECT 'Hello World!' » AS _message'..." << endl;

    try
    {
        sql::Driver *driver;
        sql::Connection *con;

    /**
        * To establish a connection to MySQL Server,
        * retrieve an instance of sql::Connection from a sql::mysql::MySQL_Driver obj
        */
        driver = get_mysql_driver_instance();
        con = driver->connect("tcp://127.0.0.1:3306", "root", "mysql");

        /* Example 1: create table and insert records */
   {
       cout << "To build a connection..." << endl;
       con = driver->connect("tcp://127.0.0.1:3306", "root", "mysql");
       sql::Statement *stmt;
       sql::ResultSet *res;
       stmt = con->createStatement();
       cout << "To create a table..." << endl;
       stmt->execute("USE cop2335");
       stmt->execute("DROP TABLE IF EXISTS test");
       stmt->execute("CREATE TABLE test(id INT, label CHAR(1))");
       stmt->execute("INSERT INTO test(id, label) VALUES (1, 'a')");
       con->close();
}


但这没用。它给了我错误:

错误LNK2019:无法解析的外部符号“ __declspec(dllimport)public:_thiscall sql :: SQLString ::〜SQLString(void)”(_imp _ ?? 1SQLString @ sql @@ QAE @ XZ)

错误LNK2019:无法解析的外部符号“ __declspec(dllimport)public:__thiscall sql :: SQLString :: SQLString(char const * const)”(_imp ?? 0SQLString @ sql @@ QAE @ QBD @ Z)

错误LNK2019:无法解析的外部符号“ __declspec(dllimport)类sql :: mysql :: MySQL_Driver * __cdecl sql :: mysql :: get_driver_instance(void)”(_imp?get_driver_instance @ mysql @ sql @@@ YAPAVMySQL_Driver @ 12 @ XZ)函数“类sql :: mysql :: MySQL_Driver * __cdecl sql :: mysql :: get_mysql_driver_instance(void)”(?get_mysql_driver_instance @ mysql @ sql @@ YAPAVMySQL_Driver @ 12 @ XZ)

这是我的代码(给出上述错误的代码)(在注释// 2下没有两行。...代码完美编译,没有任何问题):

void AddBook::OnBnClickedenterbtnaddbook()
{
sql::mysql::MySQL_Driver *driver;
    sql::Connection *con;
//1. get text from dialog textedit box


//2. initialize a DB connection
    driver = sql::mysql::get_mysql_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "password");

// 3. update DB
}


我也这样尝试过:http://www.nitecon.com/tutorials-articles/develop/cpp/c-mysql-beginner-tutorial/

但它给了我同样的错误“ Link2019”

我这里缺少东西吗?还有另一种将数据库连接到项目的方法吗?欢迎所有帮助。也感谢您的阅读。

最佳答案

未解析的外部符号通常意味着某些函数具有声明,但没有定义。

例如

Foo.h

class A {
  void foo1();
  void foo2();
}

Foo.cpp

void A::foo2() {
}


顺便说一句,在您的情况下,接缝不包含包含定义的lib / dll文件。

关于c++ - MySQL数据库连接到C++ Win32项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20579155/

10-13 06:18
查看更多