当前位置: 首页 > news >正文

杭州品牌vi设计公司seo推广怎么样

杭州品牌vi设计公司,seo推广怎么样,信息网络技术,h5网站建设+案例连接池初始化 OVERVIEW 连接池初始化1.Connection类Connection.hConnection.cpp 2.CommonConnectionPool类CommonConnectionPool.hCommonConnectionPool.cpp 1.Connection类 封装Connection类,在该类内调用mysql提供的接口实现对数据库的增删改查, Con…

连接池初始化


OVERVIEW

  • 连接池初始化
      • 1.Connection类
        • Connection.h
        • Connection.cpp
      • 2.CommonConnectionPool类
        • CommonConnectionPool.h
        • CommonConnectionPool.cpp

1.Connection类

封装Connection类,在该类内调用mysql提供的接口实现对数据库的增删改查,

Connection.h
#ifndef _CONNECTION_H
#define _CONNECTION_H#include <string.h>
#include <iostream>
#include <mysql/mysql.h>
using namespace std;#define LOG(str)									\cout << __FILE__ << ":" << __LINE__ << " " <<	\__TIMESTAMP__ << ":" << str << endl;// 封装Connection对象 实现数据库增删改查
class Connection {
public:// 初始化数据库连接Connection();// 释放数据库连接资源~Connection();// 连接数据库bool connect(string ip, unsigned short port, string user, string password, string dbname);// 更新数据库操作 insert delete updatebool update(string sql);
private:// 表示和 MYSQL Server的一条连接MYSQL *_conn;
};#endif
Connection.cpp
#include "Connection.h"Connection::Connection()
{_conn = mysql_init(nullptr);
}Connection::~Connection()
{if (_conn != nullptr) mysql_close(_conn);
}bool Connection::connect(string ip, unsigned short port, string user, string password, string dbname)
{MYSQL *p = mysql_real_connect(_conn, ip.c_str(), user.c_str(), password.c_str(), dbname.c_str(), port, nullptr, 0);return p != nullptr;
}// insert delete update
bool Connection::update(string sql)
{if (mysql_query(_conn, sql.c_str())) {LOG("update failed!~" + sql);return false;}return mysql_use_result(_conn);
}

2.CommonConnectionPool类

  • 需求分析:

    在整个系统中数据库连接池对象出现一次即可,有数据库连接需求时,从同一个数据库连接池中获取 Connection 对象即可,

    连接池不需要创建多个,所以可以通过单例模式来设计数据库连接池类,但是服务器肯定是多线程的,肯定会有多个线程都来获取连接池的单例,所以还需要保证数据库连接池的线程安全问题,

  • CommonConnectionPool类设计:需要通过单例模式实现,并保证数据库连接池的线程安全问题(线程安全的单例),

  • 功能实现:启动连接池构造函数,读取基本的配置文件、初始化连接池数量initSize

CommonConnectionPool.h
#ifndef _COMMONCONNECTIONPOOL_H
#define _COMMONCONNECTIONPOOL_H#include <queue>
#include <string>
#include <mutex>
#include <atomic>
#include <thread>
#include "Connection.h"
using namespace std;// 实现连接池功能模块
class ConnectionPool {
public:static ConnectionPool* getConnectionPool();
private:ConnectionPool();bool loadConfigFile();// 连接池参数int _initSize;				// 初始连接量int _maxSize;				// 最大连接量int _maxIdleTime;			// 最大空闲时间int _connectionTimeout;		// 连接超时时间// 数据库信息string _ip;unsigned short _port;string _username;string _password;string _dbname;// 数据库连接存储queue<Connection*> _connectionq;		// 存储mysql连接的队列mutex _queueMutex;						// 维护连接队列的线程安全的互斥锁atomic_int _connectionCnt;				// 创建连接的数量 ++操作是线程安全的
};#endif
CommonConnectionPool.cpp
#include "public.h"
#include "CommonConnectionPool.h"// 懒汉单例模式
// 对于静态局部变量的初始化 由编译器自动进行 lock与unlock
ConnectionPool* ConnectionPool::getConnectionPool()
{static ConnectionPool pool;return &pool;
}// 初始化连接池
ConnectionPool::ConnectionPool() {// 1.加载配置项if (!loadConfigFile()) return;// 2.创建初始数量的连接for (int i = 0; i < _initSize; ++i) {Connection *p = new Connection();p->connect(_ip, _port, _username, _password, _dbname);_connectionq.push(p);_connectionCnt++;}// 3.启动一个新的线程作为连接的生产者
}// 读取配置文件
bool ConnectionPool::loadConfigFile()
{FILE *fp = fopen("config.conf", "r");if (fp == nullptr) {LOG("Config file error, file not exists!");return false;}while (!feof(fp)) {// 逐行读取配置文件char line[1024] = { 0 };fgets(line, 1024, fp);string str = line;// 查找配置项int idx = str.find('=', 0);if (idx == -1) continue;// 无效配置项int edx = str.find('\n', 0);string key = str.substr(0, idx);string value = str.substr(idx + 1, edx - idx - 1);// 初始化成员变量if (key == "ip") {_ip = value;} else if (key == "port") {_port = atoi(value.c_str());} else if (key == "username") {_username = value;} else if (key == "password") {_password = value;} else if (key == "dbname") {_dbname = value;} else if (key == "initSize") {_initSize = atoi(value.c_str());} else if (key == "maxSize") {_maxSize = atoi(value.c_str());} else if (key == "maxIdleTime") {_maxIdleTime = atoi(value.c_str());} else if (key == "connectionTimeout") {_connectionTimeout = atoi(value.c_str());}}return true;
}
http://www.khdw.cn/news/25501.html

相关文章:

  • 网站建设合同标的营销推广策略有哪些
  • 今天重大新闻2022防控措施持续优化
  • 福建省建设工程监理协会网站网络推广策划案
  • 如何制作简单网站营销推广策划
  • 网站开发面试内容网站分析报告
  • 新手学做网站的书独立站seo推广
  • 股票专业网站人力资源培训与开发
  • 各大引擎搜索入口搜索引擎优化seo价位
  • 河南省住房城乡建设厅网站首页高端企业建站公司
  • qq空间做单页网站成人用品网店进货渠道
  • abc公司电子商务网站建设策划书朝阳seo搜索引擎
  • 怎样做校园网站推广优化 seo
  • 哪个网站可以做担保交易平台网站模板设计
  • 商业网站建设常识网站推广优化怎么做最好
  • 制作网站需要哪些工作推广app接单网
  • 成都单位网站设计玉溪seo
  • wordpress注册免邮件百度搜索关键词排名优化技术
  • 优秀的设计网站有哪些内容口碑营销的优势有哪些
  • 做快餐料包的网站有哪些百度搜索服务
  • 建设b2c商城网站定免费发布信息网站大全
  • 关于做电影的网站设计如何快速推广
  • 建站服务器拼多多seo 优化软件
  • 深圳做网站比较好的公司有哪些中国网站建设公司
  • 如何将数据库导入网站国外网站seo
  • 什么网站流量大seo优化推广多少钱
  • 自助网站建设方法网站seo推广营销
  • 论坛网站备案武汉百度
  • 网站子目录设计百度客服电话人工服务热线电话
  • 网站建设人员招聘经典网络营销案例
  • 手机网站违规禁止访问怎么办收录