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

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

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

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

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

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

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

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

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


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

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 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
Editor sumber terbuka yang paling popular