C 資料庫連線池設計與實現

2021-09-27 09:12:14 字數 2172 閱讀 4543

/*  

*/#ifndef_connection_pool_h

#define _connection_pool_h

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

usingnamespace std;

usingnamespace sql;

classconnpool

;#endif

/*_connection_pool_h */

#include

#include

#include

#include

"connection_pool.h"

usingnamespace std;

usingnamespace sql;

connpool*connpool:

:connpool=

null

;//連線池的建構函式

connpool:

:connpool

(stringurl, string username,string password,

int maxsize)

catch

(sql:

:sqlexception&e)

catch

(std:

:runtime_error&e)

this->

initconnection

(maxsize/2)

;}//獲取連線池物件,單例模式

connpool*connpool:

:getinstance()

returnconnpool;

}//初始化連線池,建立最大連線數的一半連線數量

voidconnpool:

:initconnection

(int iinitialsize)

else

}pthread_mutex_unlock

(&lock);}

//建立連線,返回乙個connection

connection*connpool:

:createconnection()

catch

(sql:

:sqlexception&e)

catch

(std:

:runtime_error&e)

}//在連線池中獲得乙個連線

connection*connpool:

:getconnection()

//如果連線為空,則建立連線出錯

if(con==

null

)pthread_mutex_unlock

(&lock)

; returncon;

}else

else

}else}}

//**資料庫連線

voidconnpool:

:releaseconnection

(sql:

:connection * conn)

}//連線池的析構函式

connpool::~

connpool()

//銷毀連線池,首先要先銷毀連線池的中連線

voidconnpool:

:destoryconnpool()

cursize=

0;

connlist.

clear()

;//清空連線池中的連線

pthread_mutex_unlock

(&lock);}

//銷毀乙個連線

voidconnpool:

:destoryconnection

(connection* conn)

catch

(sql:

:sqlexception&e)

catch

(std:

:exception&e)

deleteconn;

}}

c 實現資料庫連線池

自己嘗試用c 新標準實現了資料庫連線池,簡化了很多。思路 將資料庫的連線當作乙個物件新增進list佇列中,在連線池建立的時候就建立好佇列,並新增自定義大小的連線物件,連線物件用智慧型指標來管理 現代c 中不應該出現delete語句 避免類似記憶體洩漏等記憶體問題,智慧型指標上用lambda表示式註冊...

c 實現資料庫連線池

自己嘗試用c 新標準實現了資料庫連線池,簡化了很多。思路 將資料庫的連線當作乙個物件新增進list佇列中,在連線池建立的時候就建立好佇列,並新增自定義大小的連線物件,連線物件用智慧型指標來管理 現代c 中不應該出現delete語句 避免類似記憶體洩漏等記憶體問題,智慧型指標上用lambda表示式註冊...

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...