📄 group__g__connpool.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>OCILIB (C Driver for Oracle): Connection Pools</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.5.4 --><div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul></div><h1>Connection Pools</h1><hr><a name="_details"></a><h2>Detailed Description</h2>OCILIB support the OCI features Connection pooling introduced in Oracle 9i.<p><dl class="note" compact><dt><b>Note:</b></dt><dd>OCILIB implements its own pooling mechanism for Oracle 8i.</dd></dl><dl class="user" compact><dt><b>Example</b></dt><dd><div class="fragment"><pre class="fragment"><span class="preprocessor">#include "ocilib.h"</span><span class="preprocessor">#define MAX_THREADS 50</span><span class="preprocessor"></span><span class="preprocessor">#define MAX_CONN 10</span><span class="preprocessor"></span><span class="preprocessor">#define SIZE_STR 260</span><span class="preprocessor"></span><span class="keywordtype">void</span> worker(<a class="code" href="struct_o_c_i___thread.html" title="OCILIB encapsulation of OCI Threads.">OCI_Thread</a> *thread, <span class="keywordtype">void</span> *data){ <a class="code" href="struct_o_c_i___connection.html" title="Oracle physical connection.">OCI_Connection</a> *cn = <a class="code" href="group__g__connpool.html#g774ce156deb3477c83237a633b6538f6" title="Get a connection from the pool.">OCI_ConnPoolGetConnection</a>(data); <span class="keywordtype">char</span> str[SIZE_STR]; <span class="comment">/* application work here */</span> str[0] = 0; <a class="code" href="group__g__format.html#g85318e359913e49d5654d2f53a070ef7" title="Perform 3 calls (prepare+execute+fetch) in 1 call.">OCI_Immediate</a>(cn, <span class="stringliteral">"select to_char(sysdate, 'YYYYMMDD HH24:MI:SS') from dual"</span>, OCI_ARG_TEXT, str); printf(<span class="stringliteral">"%s\n"</span>, str); <span class="comment">/* ... */</span> <a class="code" href="group__g__connect.html#gc3fe655e96074adb119908be4650a4c9" title="Close a physical connection to an Oracle database server.">OCI_ConnectionFree</a>(cn);}<span class="keywordtype">int</span> main(){ <a class="code" href="struct_o_c_i___thread.html" title="OCILIB encapsulation of OCI Threads.">OCI_Thread</a> *th[MAX_THREADS]; <a class="code" href="struct_o_c_i___conn_pool.html" title="Oracle Connection Pool.">OCI_ConnPool</a> *pool; <span class="keywordtype">int</span> i; <span class="keywordflow">if</span> (!<a class="code" href="group__g__init.html#gcdb642d75f7c8478e083634144bc813c" title="Initializes the library.">OCI_Initialize</a>(NULL, NULL, OCI_ENV_DEFAULT | OCI_ENV_THREADED)) <span class="keywordflow">return</span> EXIT_FAILURE; <span class="comment">/* create pool */</span> pool = <a class="code" href="group__g__connpool.html#g55ba9db7940b0be1514ab3010c6a9e81" title="Create a Connection pool.">OCI_ConnPoolCreate</a>(<span class="stringliteral">"db"</span>, <span class="stringliteral">"usr"</span>, <span class="stringliteral">"pwd"</span>, OCI_SESSION_DEFAULT, 0, MAX_CONN, 1); <span class="comment">/* create threads */</span> <span class="keywordflow">for</span> (i = 0; i < MAX_THREADS; i++) { th[i] = <a class="code" href="group__g__threads.html#g1a2474e874215e0b42109ba042de5e3a" title="Create a Thread object.">OCI_ThreadCreate</a>(); <a class="code" href="group__g__threads.html#g1076c9942cc395f298ca350021031bfd" title="Execute the given routine within the given thread object.">OCI_ThreadRun</a>(th[i], worker, pool); } <span class="comment">/* wait for threads and cleanup */</span> <span class="keywordflow">for</span> (i = 0; i < MAX_THREADS; i++) { <a class="code" href="group__g__threads.html#gdfec0263c6b8d508126a806c85898fb9" title="Join the given thread.">OCI_ThreadJoin</a>(th[i]); <a class="code" href="group__g__threads.html#gda7fa41aeedc7be2ce4f40c93ece524d" title="Destroy a thread object.">OCI_ThreadFree</a>(th[i]); } <a class="code" href="group__g__connpool.html#g4bca447fc21e09cb1cc4cc3ec2cfcde1" title="Destroy a Connection pool object.">OCI_ConnPoolFree</a>(pool); <a class="code" href="group__g__init.html#g639706aa8e9689c7ebffc018fac6d3ae" title="Clean up all resources allocated by the library.">OCI_Cleanup</a>(); <span class="keywordflow">return</span> EXIT_SUCCESS;}</pre></div> </dd></dl><p><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr><tr><td colspan="2"><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT <a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g55ba9db7940b0be1514ab3010c6a9e81">OCI_ConnPoolCreate</a> (const mtext *db, const mtext *user, const mtext *pwd, unsigned int mode, unsigned int min_con, unsigned int max_con, unsigned int incr_con)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Create a Connection pool. <a href="#g55ba9db7940b0be1514ab3010c6a9e81"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g4bca447fc21e09cb1cc4cc3ec2cfcde1">OCI_ConnPoolFree</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a Connection pool object. <a href="#g4bca447fc21e09cb1cc4cc3ec2cfcde1"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT <a class="el" href="struct_o_c_i___connection.html">OCI_Connection</a> *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g774ce156deb3477c83237a633b6538f6">OCI_ConnPoolGetConnection</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Get a connection from the pool. <a href="#g774ce156deb3477c83237a633b6538f6"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g8fd224a01efdfbb76d642dff095d0612">OCI_ConnPoolGetTimeout</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Get the idle connection timeout. <a href="#g8fd224a01efdfbb76d642dff095d0612"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#gae3bf80948897765fc15d363de073171">OCI_ConnPoolSetTimeout</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool, unsigned int value)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Set the idle connection timeout. <a href="#gae3bf80948897765fc15d363de073171"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g0dff250d296fe1060a576e9bdb43ffb0">OCI_ConnPoolGetlGetNoWait</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Get the waiing mode used when no more connections are available from the pool. <a href="#g0dff250d296fe1060a576e9bdb43ffb0"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g5d8458d13c8704dbf60cb7289b8c6240">OCI_ConnPoolSetNoWait</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool, boolean value)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Set the waiing mode used when no more connections are available from the pool. <a href="#g5d8458d13c8704dbf60cb7289b8c6240"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#ga2cbd17675866a81848c5cd586dd43b6">OCI_ConnPoolGetBusyCount</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the current number of busy connections. <a href="#ga2cbd17675866a81848c5cd586dd43b6"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#gfe8e50af422954eac1fa3f33c6624cfd">OCI_ConnPoolGetOpenedCount</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the current number of opened connections. <a href="#gfe8e50af422954eac1fa3f33c6624cfd"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g11d1656264645b9ffb01405c2ff53021">OCI_ConnPoolGetMin</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the minimum number of connections that can be opened to the database. <a href="#g11d1656264645b9ffb01405c2ff53021"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#g24a3b2eaca171d4dbc3d40e1dc0229ca">OCI_ConnPoolGetMax</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the maximum number of connections that can be opened to the database. <a href="#g24a3b2eaca171d4dbc3d40e1dc0229ca"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__connpool.html#gc8f2a7bd2d053c9f774eb86a18533355">OCI_ConnPoolGetIncrement</a> (<a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a> *pool)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the increment for connections to be opened to the database when the pool is not full. <a href="#gc8f2a7bd2d053c9f774eb86a18533355"></a><br></td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="g55ba9db7940b0be1514ab3010c6a9e81"></a><!-- doxytag: member="ocilib.h::OCI_ConnPoolCreate" ref="g55ba9db7940b0be1514ab3010c6a9e81" args="(const mtext *db, const mtext *user, const mtext *pwd, unsigned int mode, unsigned int min_con, unsigned int max_con, unsigned int incr_con)" --><div class="memitem"><div class="memproto"> <table class="memname"> <tr> <td class="memname">OCI_EXPORT <a class="el" href="struct_o_c_i___conn_pool.html">OCI_ConnPool</a>* OCI_API OCI_ConnPoolCreate </td> <td>(</td> <td class="paramtype">const mtext * </td> <td class="paramname"> <em>db</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const mtext * </td> <td class="paramname"> <em>user</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const mtext * </td> <td class="paramname"> <em>pwd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>mode</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>min_con</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>max_con</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>incr_con</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table></div><div class="memdoc"><p>Create a Connection pool. <p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>db</em> </td><td>- Oracle Service Name </td></tr> <tr><td valign="top"></td><td valign="top"><em>user</em> </td><td>- Oracle User name </td></tr> <tr><td valign="top"></td><td valign="top"><em>pwd</em> </td><td>- Oracle User password </td></tr> <tr><td valign="top"></td><td valign="top"><em>mode</em> </td><td>- Session mode </td></tr> <tr><td valign="top"></td><td valign="top"><em>min_con</em> </td><td>- minimum number of connections that can be opened. </td></tr> <tr><td valign="top"></td><td valign="top"><em>max_con</em> </td><td>- maximum number of connections that can be opened. </td></tr> <tr><td valign="top"></td><td valign="top"><em>incr_con</em> </td><td>- next increment for connections to be opened</td></tr> </table></dl>Possible values for parameter mode :<ul><li>OCI_SESSION_DEFAULT</li><li>OCI_SESSION_SYSDBA</li><li>OCI_SESSION_SYSOPER</li></ul><p><dl class="note" compact><dt><b>Note:</b></dt><dd></dd></dl>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -