C ++ Mysql ++,总是连接失败!

时间:2008-12-22 12:41:01

标签: c++ connection mysql++

步骤:
- 已安装的Mysql Server 2005
- 下载的Mysql ++,内置调试和发布版本 - 然后运行install.hta并选择目录
- 在MSVC ++ 2008中添加了库/包含目录 - 在我的申请中包含了mysql ++。h - 将.dll文件(libMYSQL.dll和mysqlpp.dll和mysqlpp_d.dll)移动到Debug文件夹。

相关代码:

#include "mysql++.h"

class Database {

private:

    mysqlpp::Connection* conn;

public:

    ~Database();
    bool Connect(char* ip, char* user, char* pass, char* db);

};

bool Database::Connect(char* ip, char* user, char* pass, char* db) {
    conn = new mysqlpp::Connection(false);
    return conn->connect(db, ip, user, pass);
}

Database::~Database() {
    if(conn) {
        delete[] conn;
    }
}

问题:

Database db;
db.Connect("127.0.0.1", "root", "mypassword", "mydb");

这将始终返回false,即使我使用与MySQL Administrator完全相同的凭据并正确登录。

帮助:(

2 个答案:

答案 0 :(得分:2)

我不会做这个指针:

mysqlpp::Connection* conn;

让它成为班级的正常成员。

mysqlpp::Connection conn;

这有几个优点 但对你来说最重要的是你会避免浅拷贝问题。

规则4:

如果某个对象是RAW指针的所有者,那么您需要定义以下4个成员以确保正确处理内存管理:

* Constructor
* Copy Constructor
* Assignment Operator
* Destructor

这是因为如果你没有定义它们,编译器会自动为你生成上述方法。在大多数情况下这些工作,但如果你的对象包含你拥有的RAW指针(即你删除它),那么编译器生成的这些方法的版本就会出现严重的错误。

答案 1 :(得分:0)

我也会使用字符串而不是char指针:

bool Database::Connect(char* ip, char* user, char* pass, char* db)

尝试:

Database::Database(std::string const& ip,
                   std::string const& user,
                   std::string const& pass,
                   std::string const& db)

注意,将代码从Connect()方法移动到构造函数(),可以使对象始终有效。