用单例模式封装mysql数据库连接类dbconn
时间: 2023-04-22 09:06:57 浏览: 136
单例模式是一种常用的设计模式,它可以保证一个类只有一个实例,并提供一个全局访问点。在封装mysql数据库连接类dbconn时,可以使用单例模式来确保只有一个数据库连接实例存在,避免多次连接数据库造成资源浪费和性能下降的问题。
具体实现可以在dbconn类中定义一个静态成员变量instance,用于保存唯一的数据库连接实例。在构造函数中,可以通过调用mysql_real_connect函数来建立数据库连接,并将连接句柄保存在成员变量中。在析构函数中,可以调用mysql_close函数来关闭数据库连接。
为了保证线程安全,可以使用双重检查锁定机制来实现单例模式。即在getInstance函数中,先检查instance是否为空,如果为空,则加锁创建一个新的实例,否则直接返回已有的实例。
下面是一个简单的示例代码:
```
class dbconn {
private:
static dbconn* instance;
MYSQL* conn;
dbconn() {
conn = mysql_real_connect(...); // 建立数据库连接
}
~dbconn() {
mysql_close(conn); // 关闭数据库连接
}
public:
static dbconn* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mutex);
if (instance == nullptr) {
instance = new dbconn();
}
}
return instance;
}
};
dbconn* dbconn::instance = nullptr;
```
使用时可以通过dbconn::getInstance()来获取数据库连接实例,然后调用相应的mysql函数来执行数据库操作。例如:
```
dbconn* conn = dbconn::getInstance();
mysql_query(conn->conn, "SELECT * FROM table");
```