步骤:
- 已安装的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完全相同的凭据并正确登录。
帮助:(
答案 0 :(得分:2)
我不会做这个指针:
mysqlpp::Connection* conn;
让它成为班级的正常成员。
mysqlpp::Connection conn;
这有几个优点
但对你来说最重要的是你会避免浅拷贝问题。
如果某个对象是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()方法移动到构造函数(),可以使对象始终有效。