我写了c ++类来连接mysql数据库:
hpp文件
#include <vector>
#include <string>
#include "mysql/mysql.h"
#ifndef _DATA
#define _DATA
class Database {
public:
string host;
string user;
string pwd;
string db;
MYSQL * connection;
MYSQL_RES *result;
MYSQL_ROW row;
Database(const string & host,
const string & user,
const string & pwd,
const string & db);
int createMysqlConnection();
};
#endif
cpp文件
#include "Database.hpp"
Database::Database(const string & host,
const string & user,
const string & pwd,
const string & db) :
mysqlHost(host),
mysqlUser(user),
mysqlPassword(pwd),
mysqlDBName(db)
{}
int Database::createMysqlConnection(){
MYSQL * connection;
connection = mysql_init(NULL);
if(!mysql_real_connect(connection, mysqlHost.c_str(), mysqlUser.c_str(),
mysqlPassword.c_str(), mysqlDBName.c_str(),
0, NULL, 0)){
fprintf(stderr, "Connection to database failed: %s\n",
mysql_error(connection));
return EXIT_FAILURE;
}
cout << "connected to mysql" << endl;
};
当我尝试从主函数或其他类访问连接变量时,我总是会收到错误,例如变量&#39;连接未在此范围内声明。我试图使用朋友类或继承指向连接变量,但它没有工作。我想我在语法上做错了。
以下是我尝试从不同类中指向此变量的示例:
Class risk: public Database {
public:
vector<sting> parameter;
Datasabse.connection;
etc....
}
答案 0 :(得分:1)
MYSQL * connection;
仅将连接变量声明为构造函数的本地变量。您必须将其移动到类定义,以便以某种方式使其可用。或者,在Database对象中创建一个connect
方法,以明确地创建新的连接adlib。你必须用一种近似的方法来镜像它。
另一种选择是为连接创建一个专用的类Connection
,其中包括:
MYSQL *
,connect
Database
方法创建,如上所述; Database
类将充当Connection
工厂,mysql_close
,以确保正确终止底层连接。例如:
class Connection {
protected:
MYSQL *connection;
public:
Connection(MYSQL *c): connection(c){}
virtual ~Connection() { mysql_close(connection); }
MYSQL_STMT * prepareQuery(const string &query) {
return mysql_prepare(connection, query.c_str(), query.length());
}
// other methods
};
这种方法的问题在于,您很快就会感到有必要用类包装所有API原语。
答案 1 :(得分:1)
要解决这个问题我必须在类构造函数中定义MYSQL连接。这是一个代码示例:
class1.hpp
***headers***
class Flight {
public:
Flight(MYSQL * connection);
MYSQL * c;
MYSQL_RES * res;
etc...
Class1.cpp
***headers***
Flight::Flight (MYSQL* connection)
{
c = connection;
};
等...
的main.cpp
***headers***
int main (int argc, char *argv[]) {
Database db(localhost, user, etc..);
db.createMysqlConnection;
Flight fl(db.connection);
fl.GetIDs();
etc...