mysqlcapi简单连接池_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;}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP を使用してデータベース内の最初の数レコードを読み取るにはどうすればよいですか? Web アプリケーションを開発するとき、多くの場合、データベースからデータを読み取り、ユーザーに表示する必要があります。場合によっては、コンテンツ全体ではなく、データベース内の最初の数レコードだけを表示する必要があることがあります。この記事では、PHP を使用してデータベース内の最初のいくつかのレコードを読み取る方法を説明し、具体的なコード例を示します。まず、データベースに接続し、操作するテーブルを選択したと仮定します。以下は簡単なデータベース接続の例です。

Java プログラムでは、データベースへの接続は非常に一般的な操作です。データベースへの接続には既製のクラスライブラリやツールを使用できますが、プログラム開発中にはさまざまな異常事態が発生する可能性があり、SQLException もその一つです。 SQLExceptionはJavaが提供する例外クラスで、クエリ文のエラー、テーブルの存在、接続の切断など、データベースアクセス時に発生するエラーを記述します。 Java プログラマ、特に JDBC (Java Data) を使用するプログラマ向け

Go 言語は、データベース ドライバーをインポートし、データベース接続を確立し、SQL ステートメントを実行し、プリペアド ステートメントとトランザクション処理を使用してデータベースに接続します。詳細な導入: 1. データベース ドライバーをインポートし、github.com/go-sql-driver/mysql パッケージを使用して MySQL データベースに接続します; 2. データベース接続を確立し、データベース アドレス、ユーザーなどのデータベース接続情報を提供します。名前、パスワードなど。sql.Open 関数を通じてデータベース接続などを確立します。

Go 言語を使用したデータベースへの接続: アプリケーションのパフォーマンスと効率の向上 アプリケーションが開発され、ユーザー数が増加するにつれて、データのストレージと処理がますます重要になります。アプリケーションのパフォーマンスと効率を向上させるには、データベースを適切に接続して操作することが重要です。 Go 言語は、高速で信頼性が高く同時実行性の高い開発言語として、データベース処理時に効率的なパフォーマンスを提供する可能性があります。この記事では、Go 言語を使用してデータベースに接続する方法を紹介し、いくつかのコード例を示します。 Go言語を使用してデータベースドライバーをインストールする

PHP で製品在庫を実装する手順とテクニック 電子商取引業界では、製品在庫管理は非常に重要なタスクです。タイムリーかつ正確な在庫カウントにより、販売の遅延、顧客からの苦情、在庫エラーによるその他の問題を回避できます。この記事では、PHP を使用して製品在庫カウントを実装する手順とテクニックを紹介し、コード例を示します。ステップ 1: データベースを作成する まず、製品情報を保存するデータベースを作成する必要があります。 「inventory」という名前のデータベースを作成し、次に「prod」という名前のデータベースを作成します。

Go 言語を学ぶ: データベースへの接続に関する基本的な知識、特定のコード サンプルが必要です。Go 言語はオープン ソース プログラミング言語です。そのシンプルで効率的な機能により、ますます多くの開発者に愛され、使用されています。開発プロセスでは、データの読み取り、書き込み、更新、削除などの操作を実行するためにデータベースとの接続を確立することが必要になることがよくあります。したがって、Go 言語でデータベースに接続する方法を学ぶことは非常に重要なスキルです。データベース ドライバー Go 言語では、データベースに接続するためにデータベース ドライバーが必要です。現在、Go 言語の主なデータベース ドライバーは次のとおりです。

MSSQL データベースに接続するために Ubuntu システムに PHP をインストールして構成することは、特に Web アプリケーションを開発する場合に一般的なタスクです。この記事では、具体的なコード例を示しながら、Ubuntu システムに PHP、MSSQL 拡張機能をインストールし、データベース接続を構成する方法を紹介します。ステップ 1: PHP および MSSQL 拡張機能をインストールする PHP をインストールする まず、PHP が Ubuntu システムにインストールされていることを確認する必要があります。 PHP は次のコマンドでインストールできます: sudoaptu

タイトル: MySQL の Jar パッケージの重要な機能は何ですか? MySQL は、多くの Java 開発者がアプリケーション開発時に使用する人気のリレーショナル データベース管理システムです。 Java プロジェクトで MySQL データベースと対話するには、通常、MySQL が提供する公式の Java ドライバー Jar パッケージが使用されます。 MySQL の Jar パッケージには多くの重要な機能があり、この記事ではその一部を紹介し、具体的なコード例を示します。 1.MySに接続する
