【问题标题】:MySQL database connection to a c++ win32 projectMySQL 数据库连接到 c++ win32 项目
【发布时间】:2013-12-14 02:50:48
【问题描述】:

我正在尝试将 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 的目录和目录 升压 1.55.0。 湾。在项目属性图的树视图中,打开链接器, 一般,附加图书馆目录。添加 ${MySQL}/lib/opt 目录进入附加库目录文本字段并添加 $ {MySQL_Connector}/lib 目录进入附加库 目录文本字段。

之后我编译,一切都很好,然后我添加了用于建立连接的代码,该代码位于按钮单击的事件处理程序中。我的#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) 在函数“class 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”

我在这里缺少什么吗?还有其他方法可以将数据库连接到项目吗?欢迎所有帮助。也感谢阅读。

【问题讨论】:

    标签: c++ mysql sql winapi visual-c++


    【解决方案1】:

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

    例如

    Foo.h
    
    class A {
      void foo1();
      void foo2();
    }
    
    Foo.cpp
    
    void A::foo2() {
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      相关资源
      最近更新 更多