recherche
Maisonbase de donnéestutoriel mysqlmysqlcapi简单连接池_MySQL

bitsCN.com

连接池为了解决频繁的创建、销毁所带来的系统开销。

简而言之,就是 自己先创建一定量的连接,然后在需要的时候取出一条连接使用。

当然如果你只有一个线程连接数据库,而且不是实时返回结果,那么你完全不必用连接池。

想一下网络大型游戏服务器,你就明白为什么需要连接池了。

自己敲代码写了一个简单的类,实现连接池,虽然没有mysql++那么强大,但是还是自己有收获。

Csqlpool.h 头文件实现如下:

 

#pragma once#include <WinSock2.h>#include <mysql.h>#include <list>#pragma comment( lib , "libmysql.lib" )using namespace std;class Csqlpool{public:	~Csqlpool(void);	static Csqlpool *GetSqlPool();	bool IniSqlPool( const char *host , const char *name , const char *pwd , unsigned int port , unsigned int conMax );  //初始化连接池	bool SelectDB( MYSQL *sql, const char *DB);	//选择数据库	MYSQL *GetConnect();          // 获取连接	void RelConnect(MYSQL *sql) ;  // 释放连接	MYSQL_RES* GetQuery( MYSQL *sql , const char *query);      //mysql操作  增删查改	void RelQuery(MYSQL_RES *res);   //释放MYSQL_RES资源	bool Query(MYSQL *sql , const char *query);  //增、删、改操作protected:	Csqlpool(void);private:	list<MYSQL *> m_sql_free;   //空闲连接     	static Csqlpool *pSqlPool;      	CRITICAL_SECTION m_session;    //获取空闲线程};

 

Csqlpool.cpp 实现如下:

 

#include "StdAfx.h"#include "Csqlpool.h"Csqlpool *Csqlpool::pSqlPool = NULL;Csqlpool::Csqlpool(void){	InitializeCriticalSection( &m_session );}Csqlpool::~Csqlpool(void){	while ( m_sql_free.size() )	{		mysql_close( m_sql_free.front() );		m_sql_free.pop_front();	}	DeleteCriticalSection(&m_session);}Csqlpool* Csqlpool::GetSqlPool(){	if (  pSqlPool == NULL )	{		return new Csqlpool;	}	return pSqlPool;}bool Csqlpool::IniSqlPool( const char *host ,const char *name , const char *pwd , unsigned int port , unsigned int conMax )  //初始化连接池{	int nsum = 0 ;	for (unsigned int i = 0 ; i < conMax ;++i  )	{		MYSQL *pmysql;		pmysql = mysql_init( (MYSQL*)NULL );		if ( pmysql != NULL )		{			if ( mysql_real_connect( pmysql , host , name , pwd , NULL , 3306 , NULL , 0 ) )			{				m_sql_free.push_back(pmysql);			}			else			{				if ( nsum++ == 100 )				{					return false;				}				continue;			}		}		continue;	}	return true;}bool Csqlpool::SelectDB( MYSQL *sql, const char *DB)	//选择数据库{	if(mysql_select_db(sql , DB))	{		return false;	}	return true;}MYSQL* Csqlpool::GetConnect()          // 获取连接{	if ( m_sql_free.size()  )	{		EnterCriticalSection(&m_session);		MYSQL *mysql = m_sql_free.front();		m_sql_free.pop_front();		LeaveCriticalSection(&m_session);		return mysql;	}	else		return NULL;}void Csqlpool::RelConnect(MYSQL *sql)  // 释放连接{	EnterCriticalSection(&m_session);	m_sql_free.push_back(sql);	LeaveCriticalSection(&m_session);}MYSQL_RES* Csqlpool::GetQuery( MYSQL *sql , const char *query)         //查询操作{	if ( mysql_query( sql , query ) == 0 )	{		return mysql_store_result( sql );	}	else		return NULL;}void Csqlpool::RelQuery(MYSQL_RES *res)   //mysql_res release{	mysql_free_result(res);}bool Csqlpool::Query(MYSQL *sql , const char *query)  //增、删、改操作{	if ( mysql_query( sql , query ) )	{		return false;	}	return true;}

testsqlpool.cpp 测试文件实现如下:

 

// testsqlpool.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "Csqlpool.h"#include <iostream>using namespace std;Csqlpool *psql = Csqlpool::GetSqlPool();DWORD WINAPI ThreadProc( LPVOID lpParameter);int _tmain(int argc, _TCHAR* argv[]){	if(!psql->IniSqlPool("127.0.0.1" , "root" ,"123",3306,10))	{		cout<<"连接错误"<<endl;	}	HANDLE phan[2] ;	DWORD threadid[2];	int n1 = 0, n2 = 100;;	phan[0]  = CreateThread( NULL , 0 ,  ThreadProc , &n1 ,  0 , &threadid[0] );	phan[1]  = CreateThread( NULL , 0 , ThreadProc , &n2 ,   0 , &threadid[1] );	WaitForMultipleObjects( 2 , phan , true ,  INFINITE );	CloseHandle(phan[0]);	CloseHandle(phan[1]);	return 0;}DWORD WINAPI ThreadProc( LPVOID lpParameter){	int index = *(int *)lpParameter ;	int i = 1; 	MYSQL *sql = psql->GetConnect();	string stemp = "insert into actor( actor_id , first_name , last_name,last_update )values(/"";	string strsql;	char str[10];	if ( psql->SelectDB(sql , "sakila") )	{			while ( i != 100 )		{			sprintf( str , "%d" , i+index );			strsql = stemp ;			strsql +=  str;			strsql += "/",/"0/",/"0/",/"0/")";			if(!sql)				return 0;			if(!psql->Query(  sql ,strsql.c_str()  ))			{				cout<<"add false"<<endl;			}			++i;		}		psql->RelConnect(sql);	}	return 0;}
bitsCN.com
Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Quels sont les différents moteurs de stockage disponibles dans MySQL?Quels sont les différents moteurs de stockage disponibles dans MySQL?Apr 26, 2025 am 12:27 AM

MySQLoffersVariousStorageEngines, chacune, chacun desCasses: 1) InnodbisidealForApplications newedingacidcompenciance and highcurrency, soutenant les transactions et manqueurs

Quelles sont les vulnérabilités de sécurité communes dans MySQL?Quelles sont les vulnérabilités de sécurité communes dans MySQL?Apr 26, 2025 am 12:27 AM

Les vulnérabilités de sécurité courantes dans MySQL incluent l'injection SQL, les mots de passe faibles, la configuration d'autorisation incorrecte et les logiciels unpudés. 1. L'injection SQL peut être évitée en utilisant des instructions de prétraitement. 2. Les mots de passe faibles peuvent être évités en utilisant de force des stratégies de mot de passe solides. 3. Une mauvaise configuration d'autorisation peut être résolue par examen régulier et ajustement des autorisations utilisateur. 4. Les logiciels unpus peuvent être corrigés en vérifiant et mise à jour régulièrement la version MySQL.

Comment pouvez-vous identifier les requêtes lentes dans MySQL?Comment pouvez-vous identifier les requêtes lentes dans MySQL?Apr 26, 2025 am 12:15 AM

L'identification des requêtes lentes dans MySQL peut être réalisée en activant les journaux de requête lents et en définissant des seuils. 1. Activer les journaux de requête lents et définir les seuils. 2. Afficher et analyser les fichiers journaux de requête lente et utiliser des outils tels que MySqlDumpSlow ou Pt-Query-digest pour une analyse approfondie. 3. Optimisation des requêtes lentes peut être réalisée grâce à l'optimisation de l'index, à la réécriture de la requête et à l'évitement de l'utilisation de Select *.

Comment pouvez-vous surveiller la santé et les performances de MySQL Server?Comment pouvez-vous surveiller la santé et les performances de MySQL Server?Apr 26, 2025 am 12:15 AM

Pour surveiller la santé et les performances des serveurs MySQL, vous devez prêter attention à la santé du système, aux mesures de performance et à l'exécution des requêtes. 1) Surveiller la santé du système: utilisez les commandes TOP, HTOP ou ShowGlobalStatus pour afficher les activités du CPU, de la mémoire, des E / S de disque et du réseau. 2) Suivre les indicateurs de performance: surveiller les indicateurs clés tels que le numéro de requête par seconde, le temps de requête moyen et le taux de réussite du cache. 3) Assurer l'optimisation de l'exécution des requêtes: activer les journaux de requête lents, enregistrer et optimiser les requêtes dont le temps d'exécution dépasse le seuil défini.

Comparez et contrastez MySQL et Mariadb.Comparez et contrastez MySQL et Mariadb.Apr 26, 2025 am 12:08 AM

La principale différence entre MySQL et MARIADB est les performances, les fonctionnalités et la licence: 1. MySQL est développé par Oracle, et MariADB est sa fourche. 2. MariaDB peut mieux fonctionner dans des environnements à haute charge. 3.MariaDB fournit plus de moteurs et de fonctions de stockage. 4.MySQL adopte une double licence et MariaDB est entièrement open source. L'infrastructure existante, les exigences de performance, les exigences fonctionnelles et les coûts de licence doivent être pris en compte lors du choix.

Comment les licences de MySQL se comparent-elles aux autres systèmes de base de données?Comment les licences de MySQL se comparent-elles aux autres systèmes de base de données?Apr 25, 2025 am 12:26 AM

MySQL utilise une licence GPL. 1) La licence GPL permet l'utilisation, la modification et la distribution gratuites de MySQL, mais la distribution modifiée doit se conformer à GPL. 2) Les licences commerciales peuvent éviter les modifications publiques et conviennent aux applications commerciales qui nécessitent de la confidentialité.

Quand choisissez-vous InNODB sur Myisam, et vice versa?Quand choisissez-vous InNODB sur Myisam, et vice versa?Apr 25, 2025 am 12:22 AM

Les situations lors du choix d'innodb au lieu de Myisam incluent: 1) le support de transaction, 2) un environnement de concurrence élevé, 3) une cohérence élevée des données; Inversement, la situation où le choix de Myisam comprend: 1) la lecture principalement des opérations, 2) Aucun support de transaction n'est requis. INNODB convient aux applications qui nécessitent une cohérence élevée des données et un traitement des transactions, telles que les plates-formes de commerce électronique, tandis que Myisam convient aux applications en lecture et sans transaction telles que les systèmes de blog.

Expliquez le but des clés étrangères dans MySQL.Expliquez le but des clés étrangères dans MySQL.Apr 25, 2025 am 12:17 AM

Dans MySQL, la fonction des clés étrangères est d'établir la relation entre les tables et d'assurer la cohérence et l'intégrité des données. Les clés étrangères maintiennent l'efficacité des données grâce à des contrôles d'intégrité de référence et aux opérations en cascade. Faites attention à l'optimisation des performances et évitez les erreurs courantes lorsque vous les utilisez.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel