cari
Rumahpangkalan datatutorial 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
Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
如何使用PHP读取数据库中的前几条记录?如何使用PHP读取数据库中的前几条记录?Mar 22, 2024 am 10:03 AM

如何使用PHP读取数据库中的前几条记录?在开发Web应用程序时,我们经常需要从数据库中读取数据并展示给用户。有时候,我们只需要显示数据库中的前几条记录,而不是全部内容。本文将教您如何使用PHP读取数据库中的前几条记录,并提供具体的代码示例。首先,假设您已经连接到数据库并选择了要操作的表。以下为一个简单的数据库连接示例:

Java连接数据库的SQLException异常该如何处理?Java连接数据库的SQLException异常该如何处理?Jun 24, 2023 pm 09:23 PM

在Java程序中,连接数据库是很常见的操作。虽然连接数据库能够使用现成的类库和工具,但是在程序开发时仍然有可能出现各种异常情况,其中SQLException异常就是其中一种情况。SQLException是Java提供的一个异常类,它描述了在访问数据库时发生的错误,如查询语句错误、表不存在、连接断开等。对于Java程序员来说,特别是那些使用JDBC(Java数

go语言怎么连接数据库go语言怎么连接数据库Dec 12, 2023 pm 03:51 PM

go语言通过导入数据库驱动、建立数据库连接、执行SQL语句、使用预处理语句和事务处理处理等步骤来连接数据库。详细介绍:1、导入数据库驱动,使用github.com/go-sql-driver/mysql包来连接MySQL数据库;2、建立数据库连接,提供数据库的连接信息,包括数据库的地址、用户名、密码等再通过sql.Open函数来建立数据库连接等等。

利用Go语言连接数据库:提高应用程序性能与效率利用Go语言连接数据库:提高应用程序性能与效率Jan 23, 2024 am 08:57 AM

使用Go语言连接数据库:提升应用程序的性能和效率随着应用程序的发展和用户量的增加,对数据的存储和处理变得越来越重要。为了提高应用程序的性能和效率,合理地连接和操作数据库是至关重要的一环。Go语言作为一种快速、可靠、并发性强的开发语言,具有在处理数据库时提供高效性能的潜力。本文将介绍如何使用Go语言连接数据库,并提供一些代码示例。安装数据库驱动程序在使用Go语

PHP实现商品库存盘点的步骤与技巧PHP实现商品库存盘点的步骤与技巧Aug 18, 2023 am 08:39 AM

PHP实现商品库存盘点的步骤与技巧在电商行业,商品库存管理是非常重要的一项工作。及时、准确地进行库存盘点,可以避免因库存错误导致的销售延误、客户投诉等问题。本文将介绍如何使用PHP来实现商品库存盘点的步骤与技巧,并提供代码示例。步骤一:建立数据库首先,我们需要建立一个数据库来存储商品信息。创建一个名为"inventory"的数据库,然后建立一个名为"prod

入门Go语言:数据库连接的基本概念入门Go语言:数据库连接的基本概念Jan 23, 2024 am 08:17 AM

学习Go语言:连接数据库的基础知识,需要具体代码示例Go语言是一种开源的编程语言,其简洁、高效的特性让越来越多的开发者喜爱和使用。在开发过程中,经常需要与数据库建立连接,进行数据的读取、写入、更新和删除等操作。因此,学会如何在Go语言中连接数据库是非常重要的技能。数据库驱动在Go语言中,连接数据库需要使用数据库驱动程序。目前,Go语言的主要数据库驱动有以

MySQL的Jar包有哪些重要功能?MySQL的Jar包有哪些重要功能?Mar 01, 2024 pm 09:45 PM

标题:MySQL的Jar包有哪些重要功能?MySQL是一种流行的关系型数据库管理系统,许多Java开发人员在开发应用程序时都会使用MySQL数据库。为了在Java项目中与MySQL数据库进行交互,通常会使用MySQL提供的官方Java驱动程序Jar包。MySQL的Jar包具有许多重要功能,本文将针对其中一些功能进行介绍,并提供具体的代码示例。1.连接MyS

如何在Ubuntu系统上安装配置PHP以连接MSSQL数据库如何在Ubuntu系统上安装配置PHP以连接MSSQL数据库Feb 29, 2024 am 10:06 AM

在Ubuntu系统上安装配置PHP以连接MSSQL数据库是一项常见的任务,特别是在开发Web应用程序时。在本文中,我们将介绍如何在Ubuntu系统上安装PHP、MSSQL扩展以及配置数据库连接,同时提供具体的代码示例。步骤一:安装PHP和MSSQL扩展安装PHP首先,需要确保在Ubuntu系统上安装了PHP。可以通过以下命令来安装PHP:sudoaptu

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular