doc-exports/docs/dws/umn/dws_01_0086.html
Lu, Huayi 95132e24fc DWS UMN 830.201_new version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Reviewed-by: Rechenburg, Matthias <matthias.rechenburg@t-systems.com>
Co-authored-by: Lu, Huayi <luhuayi@huawei.com>
Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
2024-05-27 11:54:34 +00:00

348 lines
58 KiB
HTML

<a name="EN-US_TOPIC_0000001659054498"></a><a name="EN-US_TOPIC_0000001659054498"></a>
<h1 class="topictitle1">Using ODBC to Connect to a Cluster</h1>
<div id="body8662426"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p4447886312449">In GaussDB(DWS), you can use an ODBC driver to connect to the database. The driver can connect to the database through an ECS on the <span id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_text1860219334119">cloud</span> platform or over the Internet.</p>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p20961377114425">For details about how to use the ODBC API, see the official document.</p>
<div class="section" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_section17871125219214"><h4 class="sectiontitle">Prerequisites</h4><ul id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ul851820296410"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li3662151832915">You have downloaded ODBC driver packages <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1166551813296"><b>dws_x.x.x_odbc_driver_for_xxx.zip</b></span> (for Linux) and <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath7653111812296"><b>dws_odbc_driver_for_windows.zip</b></span> (for Windows). For details, see <a href="dws_01_0032.html">Downloading the JDBC or ODBC Driver</a>.<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p7035726113931">GaussDB(DWS) also supports open-source ODBC driver: PostgreSQL ODBC 09.01.0200 or later.</p>
</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li85185291849">You have downloaded the open-source unixODBC code file 2.3.0 from <a href="https://sourceforge.net/projects/unixodbc/files/unixODBC/2.3.0/unixODBC-2.3.0.tar.gz/download" target="_blank" rel="noopener noreferrer">https://sourceforge.net/projects/unixodbc/files/unixODBC/2.3.0/unixODBC-2.3.0.tar.gz/download</a>.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li6710155017321">You have downloaded the SSL certificate file. For details, see <a href="dws_01_0038.html#EN-US_TOPIC_0000001659054490__en-us_topic_0000001372520154_li13478842115911">Downloading an SSL Certificate</a>.</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_section42307202184151"><h4 class="sectiontitle">Using an ODBC Driver to Connect to a Database (Linux)</h4><ol id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ol58383118184236"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li22399552184847"><span>Upload the ODBC package and code file to the Linux environment and decompress them to the specified directory.</span></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li44629232185020"><span>Log in to the Linux environment as user <strong id="EN-US_TOPIC_0000001659054498__b62711076185045">root</strong>.</span></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li13805782185042"><span>Prepare <strong id="EN-US_TOPIC_0000001659054498__b842352706145016">unixODBC</strong>.</span><p><ol type="a" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ol51532133185452"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li56389105185454">Decompress the <strong id="EN-US_TOPIC_0000001659054498__b2006741919145033">unixODBC</strong> code file.<pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen111870954315">tar -xvf unixODBC-2.3.0.tar.gz</pre>
</li><li id="EN-US_TOPIC_0000001659054498__li15236967185652">Compile the code file and install the driver.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054498__screen1938411464456"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">cd</span><span class="w"> </span><span class="n">unixODBC</span><span class="o">-</span><span class="mi">2</span><span class="p">.</span><span class="mi">3</span><span class="p">.</span><span class="mi">0</span>
<span class="p">.</span><span class="o">/</span><span class="n">configure</span><span class="w"> </span><span class="c1">--enable-gui=no</span>
<span class="n">make</span>
<span class="n">make</span><span class="w"> </span><span class="n">install</span>
</pre></div></td></tr></table></div>
</div>
<div class="note" id="EN-US_TOPIC_0000001659054498__note69312159488"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="EN-US_TOPIC_0000001659054498__ul12637252506"><li id="EN-US_TOPIC_0000001659054498__li4637145155010">After the unixODBC is compiled and installed, the <strong id="EN-US_TOPIC_0000001659054498__b033216214820">*.so.2</strong> library file will be in the installation directory. To create the <strong id="EN-US_TOPIC_0000001659054498__b16591191354819">*.so.1</strong> library file, change <strong id="EN-US_TOPIC_0000001659054498__b4606105514471">LIB_VERSION</strong> in the configure file to <strong id="EN-US_TOPIC_0000001659054498__b84291451124713">1:0:0</strong>.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054498__screen134015019565"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">LIB_VERSION</span><span class="o">=</span><span class="ss">&quot;1:0:0&quot;</span>
</pre></div></td></tr></table></div>
</div>
</li><li id="EN-US_TOPIC_0000001659054498__li58222049131515">This driver dynamically loads the <strong id="EN-US_TOPIC_0000001659054498__b5866924220">libodbcinst.so.</strong>* library files. If one of the library files is successfully loaded, the library file is loaded. The loading priority is <strong id="EN-US_TOPIC_0000001659054498__b32163014556">libodbcinst.so</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b565314315510">libodbcinst.so.1</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b1248120719556">libodbcinst.so.1.0.0</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b8620111119555">libodbcinst.so.2</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b1656201515550">libodbcinst.so.2.0.0</strong>.<p id="EN-US_TOPIC_0000001659054498__p6296185810152">For example, a directory can be dynamically linked to <strong id="EN-US_TOPIC_0000001659054498__b851210351431">libodbcinst.so.1</strong>, <strong id="EN-US_TOPIC_0000001659054498__b888843913315">libodbcinst.so.1.0.0</strong>, and <strong id="EN-US_TOPIC_0000001659054498__b4492443530">libodbcinst.so.2</strong>. The driver file loads <strong id="EN-US_TOPIC_0000001659054498__b214859636">libodbcinst.so</strong> first. If <strong id="EN-US_TOPIC_0000001659054498__b1686683644">libodbcinst.so</strong> cannot be found in the current environment, the driver file searches for <strong id="EN-US_TOPIC_0000001659054498__b17813122410">libodbcinst.so.1</strong>, which has a lower priority. After <strong id="EN-US_TOPIC_0000001659054498__b1445812526411">libodbcinst.so.1</strong> is loaded, the loading is complete.</p>
</li></ul>
</div></div>
</li></ol>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li1680342185325"><span>Replace the driver file. (This document uses the <strong id="EN-US_TOPIC_0000001659054498__b13966036648032">dws_8.1.x_odbc_driver_for_x86_redhat.zip</strong> package of Red Hat as an example.)</span><p><ol type="a" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ol2972802419237"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li6653799219340">Decompress the <strong id="EN-US_TOPIC_0000001659054498__b13908089688032">dws_8.1.x_odbc_driver_for_x86_redhat.zip</strong> package.<pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen19584115418438">unzip dws_8.1.x_odbc_driver_for_x86_redhat.zip</pre>
</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li1979546019237">Copy all files in the <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath95273722918"><b>lib</b></span> directory to <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath152707152913"><b>/usr/local/lib</b></span>. If there are files with the same name, overwrite them.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li3838060519238">Copy <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath6589112202917"><b>psqlodbcw.la</b></span> and <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1589812122912"><b>psqlodbcw.so</b></span> in the <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1759011262910"><b>odbc/lib</b></span> directory to <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath7590111202914"><b>/usr/local/lib</b></span>.</li></ol>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li46316519011"><span>Run the following command to modify the configuration of the driver file:</span><p><pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen1192197184416">vi /usr/local/etc/odbcinst.ini</pre>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p596588781960">Copy the following content to the file:</p>
<pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen52768284192146">[DWS]
Driver64=/usr/local/lib/psqlodbcw.so</pre>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p5205028419636">The parameters are as follows:</p>
<ul id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ul1960091192141"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li61496548192141"><span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname58213316203"><b>[DWS]</b></span>: indicates the driver name. You can customize the name.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li20365480192141"><span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname83476172715038"><b>Driver64</b></span> or <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname72737448915038"><b>Driver</b></span>: indicates the path where the dynamic library of the driver resides. For a 64-bit operating system, search for <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname8831308151524"><b>Driver64</b></span> first. If <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname135152214215216"><b>Driver64</b></span> is not configured, search for <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname1356133915228"><b>Driver</b></span>.</li></ul>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li5994285219917"><span>Run the following command to modify the data source file:</span><p><pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen1187521104417">vi /usr/local/etc/odbc.ini</pre>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p6601764019934">Copy the following content to the configuration file, save the modification, and exit.</p>
<pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen2948013119213">[DWSODBC]
Driver=DWS
Servername=10.10.0.13
Database=<span id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_text1492618223496">gaussdb</span>
Username=dbadmin
Password=<em id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_i1485105816362">password</em>
Port=8000
Sslmode=allow</pre>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_table698016191057" frame="border" border="1" rules="all"><thead align="left"><tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row43688892191057"><th align="left" class="cellrowborder" valign="top" width="20%" id="mcps1.3.4.2.6.2.4.1.4.1.1"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p49139350191057"><strong id="EN-US_TOPIC_0000001659054498__b4331210191910">Parameter</strong></p>
</th>
<th align="left" class="cellrowborder" valign="top" width="40%" id="mcps1.3.4.2.6.2.4.1.4.1.2"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p53562174191057"><strong id="EN-US_TOPIC_0000001659054498__b1861928191910">Description</strong></p>
</th>
<th align="left" class="cellrowborder" valign="top" width="40%" id="mcps1.3.4.2.6.2.4.1.4.1.3"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p56575432191057"><strong id="EN-US_TOPIC_0000001659054498__b3176675391910">Example Value</strong></p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row38648128191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p43490644191057">[DSN]</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p33081269191057">Data source name.</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p62337098191057">[DWSODBC]</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row24162971191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p11043674191057">Driver</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p22122434191057">Driver name, corresponding to <strong id="EN-US_TOPIC_0000001659054498__b84235270615421">DriverName</strong> in <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath107056302415438"><b>odbcinst.ini</b></span>.</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p47086714191057">Driver=DWS</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row21127243191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p33585151191057">Servername</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p36042711191057">IP address of the server. When the cluster is bound to an ELB, set this parameter to the IP address of the ELB.</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p33778492191057">Servername=10.10.0.13</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row35570974191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p62676673191057">Database</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p43645732191057">Name of the database to be connected to.</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p45643375191057">Database=<span id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_text32573110495">gaussdb</span></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row8137195191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p55133095191057">Username</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p36595678191057">Database username.</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p11459962191057">Username=dbadmin</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row36030802191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p32813824191057">Password</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p40674054191057">Database user password.</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p6264077191057">Password=<em id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_i2810155813383">password</em></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row56376696191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p3109667191057">Port</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p50556450191057">Port number of the server.</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p1431774191057">Port=8000</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_row12885966191057"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.3.4.2.6.2.4.1.4.1.1 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p37130287191057">Sslmode</p>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.2 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p54763265191057">SSL certification mode. This parameter is enabled for the cluster by default.</p>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p1442353513431">Values and meanings:</p>
<ul id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ul1438325020436"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_l9ac09a2ab8b14487ba43bce7515fe02c"><strong id="EN-US_TOPIC_0000001659054498__b32561338841035">disable</strong>: only tries to establish a non-SSL connection.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_l10714c79fff643a2bde8cc0d14f9a550"><strong id="EN-US_TOPIC_0000001659054498__b20989924241035">allow</strong>: tries establishing a non-SSL connection first, and then an SSL connection if the attempt fails.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_lc2da059541734fba8d137f55a96233b8"><strong id="EN-US_TOPIC_0000001659054498__b176551509841035">prefer</strong>: tries establishing an SSL connection first, and then a non-SSL connection if the attempt fails.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_l78e6534064744494898e97b882918b8a"><strong id="EN-US_TOPIC_0000001659054498__b143512726541035">require</strong>: only tries establishing an SSL connection. If there is a CA file, perform the verification according to the scenario in which the parameter is set to <strong id="EN-US_TOPIC_0000001659054498__b85429463641035">verify-ca</strong>.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_l49c0e849bdfc4e2fb2194e8431ac964a"><strong id="EN-US_TOPIC_0000001659054498__b90384709241035">verify-ca</strong>: tries establishing an SSL connection and checks whether the server certificate is issued by a trusted CA.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_l0476331028bd4ac5b3ed14065a17cc1b"><strong id="EN-US_TOPIC_0000001659054498__b173264976541035">verify-full</strong>: not supported by GaussDB(DWS)</li></ul>
<div class="note" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_note94497271018"><span class="notetitle"> NOTE: </span><div class="notebody"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p444916277012">The SSL mode delivers higher security than the common mode. By default, the SSL function is enabled in a cluster to allow SSL or non-SSL connections from the client. You are advised to use the SSL mode when using ODBC to connect to a GaussDB (DWS) cluster.</p>
</div></div>
</td>
<td class="cellrowborder" valign="top" width="40%" headers="mcps1.3.4.2.6.2.4.1.4.1.3 "><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p6639467191057">Sslmode=allow</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_note29200528152533"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p61478167152533">You can view the values of <strong id="EN-US_TOPIC_0000001659054498__b17700145218138">Servername</strong> and <strong id="EN-US_TOPIC_0000001659054498__b19701145217136">Port</strong> on the GaussDB(DWS) management console. Log in to the GaussDB(DWS) management console and click <span class="uicontrol" id="EN-US_TOPIC_0000001659054498__uicontrol145331255151313"><b>Client Connections</b></span>. In the <span class="uicontrol" id="EN-US_TOPIC_0000001659054498__uicontrol16533055141318"><b>Data Warehouse Connection String</b></span> area, select the target cluster and obtain <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname10533105510138"><b>Private Network Address</b></span> or <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname05334555130"><b>Public Network Address</b></span>. For details, see <a href="dws_01_0033.html">Obtaining the Cluster Connection Address</a>.</p>
</div></div>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li6874063191310"><span>Configure environment variables.</span><p><pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen1220893664411">vi ~/.bashrc</pre>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p46013599191353">Add the following information to the configuration file:</p>
<pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen6587863619147">export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
export ODBCSYSINI=/usr/local/etc
export ODBCINI=/usr/local/etc/odbc.ini</pre>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li51296297191449"><span>Import environment variables.</span><p><pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen1635219505445">source ~/.bashrc</pre>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li10140537191514"><span>Run the following commands to connect to the database:</span><p><pre class="screen" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen828313279460">/usr/local/bin/isql -v DWSODBC</pre>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p52062584634">If the following information is displayed, the connection is successful:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen50768870192026"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span>
<span class="normal">7</span>
<span class="normal">8</span>
<span class="normal">9</span></pre></div></td><td class="code"><div><pre><span></span><span class="o">+</span><span class="c1">---------------------------------------+ </span>
<span class="o">|</span><span class="w"> </span><span class="n">Connected</span><span class="o">!</span><span class="w"> </span><span class="o">|</span><span class="w"> </span>
<span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span>
<span class="o">|</span><span class="w"> </span><span class="k">sql</span><span class="o">-</span><span class="k">statement</span><span class="w"> </span><span class="o">|</span><span class="w"> </span>
<span class="o">|</span><span class="w"> </span><span class="n">help</span><span class="w"> </span><span class="p">[</span><span class="n">tablename</span><span class="p">]</span><span class="w"> </span><span class="o">|</span><span class="w"> </span>
<span class="o">|</span><span class="w"> </span><span class="n">quit</span><span class="w"> </span><span class="o">|</span><span class="w"> </span>
<span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span>
<span class="o">+</span><span class="c1">---------------------------------------+ </span>
<span class="k">SQL</span><span class="o">&gt;</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
</p></li></ol>
</div>
<div class="section" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_section31086112145338"><h4 class="sectiontitle">Using an ODBC Driver to Connect to a Database (Windows)</h4><ol id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ol2138056114572"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li872731215932"><span>Decompress ODBC driver package <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath471148015955"><b>dws_odbc_driver_for_windows.zip</b></span> (for Windows) and install <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath32149566111923"><b>psqlodbc.msi</b></span>.</span></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li2546198214158"><span>Decompress the SSL certificate package to obtain the certificate file.</span><p><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p978212174543">You can choose to automatically or manually deploy the certificate based on your needs.</p>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p3712133735313">Automatic deployment:</p>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p20712123755316">Double-click the <strong id="EN-US_TOPIC_0000001659054498__b842352706185049">sslcert_env.bat</strong> file. The certificate is automatically deployed to a default location.</p>
<div class="note" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_note12712153713536"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p1971283716535">The <strong id="EN-US_TOPIC_0000001659054498__b84235270618538">sslcert_env.bat</strong> file ensures the purity of the certificate environment. When the <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1070563024185355"><b>%APPDATA%\postgresql</b></span> directory exists, a message will be prompted asking you whether you want to remove related directories. If you want to remove related directories, back up files in the directory.</p>
</div></div>
<div class="p" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p871503710532">Manual deployment:<ol type="a" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ol971512372537"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li4712203795319">Create a new folder named <span class="parmvalue" id="EN-US_TOPIC_0000001659054498__parmvalue1271243712533"><b>postgresql</b></span> in the <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath187126374531"><b>%APPDATA%\</b></span> directory.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li1715137125312">Copy files <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath802667186174228"><b>client.crt</b></span>, <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1405418173174228"><b>client.key</b></span>, <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1601843327174228"><b>client.key.cipher</b></span>, and <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1542043402174228"><b>client.key.rand</b></span> to the <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1212064917444"><b>%APPDATA%\postgresql</b></span> directory and change <strong id="EN-US_TOPIC_0000001659054498__b637999848174425">client</strong> in the file name to <strong id="EN-US_TOPIC_0000001659054498__b107468202617487">postgres</strong>. For example, change the name of <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1349544050174818"><b>client.key</b></span> to <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1440362531174831"><b>postgres.key</b></span>.</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li4715153714539">Copy <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath2043287654174856"><b>cacert.pem</b></span> to <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath189881092817492"><b>%APPDATA%\postgresql</b></span> and change the name of <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath1439223584174919"><b>cacert.pem</b></span> to <span class="filepath" id="EN-US_TOPIC_0000001659054498__filepath2127076779174924"><b>root.crt</b></span>.</li></ol>
</div>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_lf33a212263634615b4fbacf3d789b929"><span>Open Driver Manager.</span><p><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_a8cf25c24bbdc4a98b86916942ac1417f"><span id="EN-US_TOPIC_0000001659054498__te1f6a1c318b148699f26d2ba01ffb38d">GaussDB(DWS)</span> provides 32-bit and 64-bit ODBC drivers. Choose the version suitable for your system when configuring the data source. (Assume the Windows system drive is drive C. If another disk drive is used, modify the path accordingly.)</p>
<ul id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_u097e2db1c3af436b909e817167a58ae6"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_l28c81f0b9c7f461b8c255af03fa20be3">If you want to develop 32-bit programs in the 64-bit OS and have installed the 32-bit driver, open the 32-bit Driver Manager at <strong id="EN-US_TOPIC_0000001659054498__b19790174031316">C:\Windows\SysWOW64\odbcad32.exe</strong>.<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_a9717f2dcbd904f319c811aa779a49ede">Do not choose <strong id="EN-US_TOPIC_0000001659054498__b10777145113253">Control Panel</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b1078311517254">System and Security</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b4784175162515">Administrative Tools</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b18784135118255">Data Sources (ODBC)</strong> directly.</p>
<div class="note" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_nca1e7e82949f47a99d5b7f5f9cb47d19"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_a2451821c31ab4c7bad8a98605f7cde8e">WOW64 is the acronym for Windows 32-bit on Windows 64-bit. <strong id="EN-US_TOPIC_0000001659054498__b842352706155639">C:\Windows\SysWOW64\</strong> stores the 32-bit environment on a 64-bit system. </p>
</div></div>
</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li920021015520">If you want to develop 64-bit programs in the 64-bit OS and have installed the 64-bit driver, open the 64-bit Driver Manager at <strong id="EN-US_TOPIC_0000001659054498__b842352706152254">C:\Windows\System32\odbcad32.exe</strong>.<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p556719580577">Do not choose <strong id="EN-US_TOPIC_0000001659054498__b153145171410">Control Panel</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b123135131410">System and Security</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b11335191412">Administrative Tools</strong> &gt; <strong id="EN-US_TOPIC_0000001659054498__b15315101418">Data Sources (ODBC)</strong> directly.</p>
<div class="note" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_note3313611585"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p123117619581"><strong id="EN-US_TOPIC_0000001659054498__b1498417223164">C:\Windows\System32\</strong> stores the environment consistent with the current OS. For technical details, see Windows technical documents.</p>
</div></div>
</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_lff4131c5fa82445d925b99c829996239">In a 32-bit OS, open <strong id="EN-US_TOPIC_0000001659054498__b842352706154940">C:\Windows\System32\odbcad32.exe</strong>.<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_abb043c2490b449dc94085625a60ea1af">Alternatively, click <strong id="EN-US_TOPIC_0000001659054498__b98831542141610">Computer</strong>, and choose <strong id="EN-US_TOPIC_0000001659054498__b3883042141615">Control Panel</strong>. Click <strong id="EN-US_TOPIC_0000001659054498__b088310428164">Administrative Tools</strong> and click <strong id="EN-US_TOPIC_0000001659054498__b38838429167">Data Sources (ODBC)</strong>.</p>
</li></ul>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li56721736141540"><span>Configure a data source to be connected to.</span><p><ol type="a" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_ol41797475152355"><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li12659042152355">On the <strong id="EN-US_TOPIC_0000001659054498__b68972146264">User DSN</strong> tab, click <strong id="EN-US_TOPIC_0000001659054498__b1090351482618">Add</strong> and choose <strong id="EN-US_TOPIC_0000001659054498__b89031414172619">PostgreSQL Unicode</strong> for setup.<div class="fignone" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_fig46625912141933"><span class="figcap"><b>Figure 1 </b>Configuring a data source to be connected to</span><br><span><img id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_image18602527141933" src="figure/en-us_image_0000001711592348.png"></span></div>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p623103011566">You can view the values of <strong id="EN-US_TOPIC_0000001659054498__b1633019586138">Server</strong> and <strong id="EN-US_TOPIC_0000001659054498__b2331258171315">Port</strong> on the GaussDB(DWS) management console. Log in to the GaussDB(DWS) management console and click <span class="uicontrol" id="EN-US_TOPIC_0000001659054498__uicontrol11617191414"><b>Client Connections</b></span>. In the <span class="uicontrol" id="EN-US_TOPIC_0000001659054498__uicontrol4162181201411"><b>Data Warehouse Connection String</b></span> area, select the target cluster and obtain <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname2162212141"><b>Private Network Address</b></span> or <span class="parmname" id="EN-US_TOPIC_0000001659054498__parmname17162519145"><b>Public Network Address</b></span>. For details, see <a href="dws_01_0033.html">Obtaining the Cluster Connection Address</a>.</p>
</li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li22304115152428">Click <span class="uicontrol" id="EN-US_TOPIC_0000001659054498__uicontrol39977673152428"><b>Test</b></span> to verify that the connection is correct. If <span class="parmvalue" id="EN-US_TOPIC_0000001659054498__parmvalue24254738152428"><b>Connection successful</b></span> is displayed, the connection is correct.</li></ol>
</p></li><li id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_li33236979152817"><span>Compile an ODBC sample program to connect to the data source.</span><p><p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p23993252393">The ODBC API does not provide the database connection retry capability. You need to implement the connection retry processing in the service code.</p>
<p id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_p5104714152834">The sample code is as follows:</p>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001659054498__en-us_topic_0000001422959309_screen52603220152846"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">// This example shows how to obtain GaussDB(DWS) data through the ODBC driver.</span>
<span class="c1">// DBtest.c (compile with: libodbc.so) </span>
<span class="err">#</span><span class="n">include</span><span class="w"> </span><span class="o">&lt;</span><span class="n">stdlib</span><span class="p">.</span><span class="na">h</span><span class="o">&gt;</span><span class="w"> </span>
<span class="err">#</span><span class="n">include</span><span class="w"> </span><span class="o">&lt;</span><span class="n">stdio</span><span class="p">.</span><span class="na">h</span><span class="o">&gt;</span><span class="w"> </span>
<span class="err">#</span><span class="n">include</span><span class="w"> </span><span class="o">&lt;</span><span class="n">sqlext</span><span class="p">.</span><span class="na">h</span><span class="o">&gt;</span>
<span class="err">#</span><span class="n">ifdef</span><span class="w"> </span><span class="n">WIN32</span>
<span class="err">#</span><span class="n">include</span><span class="w"> </span><span class="o">&lt;</span><span class="n">windows</span><span class="p">.</span><span class="na">h</span><span class="o">&gt;</span>
<span class="err">#</span><span class="n">endif</span><span class="w"> </span>
<span class="n">SQLHENV</span><span class="w"> </span><span class="n">V_OD_Env</span><span class="p">;</span><span class="w"> </span><span class="c1">// Handle ODBC environment </span>
<span class="n">SQLHSTMT</span><span class="w"> </span><span class="n">V_OD_hstmt</span><span class="p">;</span><span class="w"> </span><span class="c1">// Handle statement </span>
<span class="n">SQLHDBC</span><span class="w"> </span><span class="n">V_OD_hdbc</span><span class="p">;</span><span class="w"> </span><span class="c1">// Handle connection </span>
<span class="kt">char</span><span class="w"> </span><span class="n">typename</span><span class="o">[</span><span class="mi">100</span><span class="o">]</span><span class="p">;</span>
<span class="n">SQLINTEGER</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
<span class="n">SQLINTEGER</span><span class="w"> </span><span class="n">V_OD_erg</span><span class="p">,</span><span class="n">V_OD_buffer</span><span class="p">,</span><span class="n">V_OD_err</span><span class="p">,</span><span class="n">V_OD_id</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">argv</span><span class="o">[]</span><span class="p">)</span><span class="w"> </span>
<span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// 1. Apply for an environment handle. </span>
<span class="w"> </span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SQLAllocHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_ENV</span><span class="p">,</span><span class="n">SQL_NULL_HANDLE</span><span class="p">,</span><span class="o">&amp;</span><span class="n">V_OD_Env</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">SQL_SUCCESS</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">SQL_SUCCESS_WITH_INFO</span><span class="p">))</span><span class="w"> </span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Error AllocHandle\n&quot;</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// 2. Set environment attributes (version information). </span>
<span class="w"> </span><span class="n">SQLSetEnvAttr</span><span class="p">(</span><span class="n">V_OD_Env</span><span class="p">,</span><span class="w"> </span><span class="n">SQL_ATTR_ODBC_VERSION</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">SQL_OV_ODBC3</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// 3. Apply for a connection handle. </span>
<span class="w"> </span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SQLAllocHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_DBC</span><span class="p">,</span><span class="w"> </span><span class="n">V_OD_Env</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">V_OD_hdbc</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">SQL_SUCCESS</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">SQL_SUCCESS_WITH_INFO</span><span class="p">))</span><span class="w"> </span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="n">SQLFreeHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_ENV</span><span class="p">,</span><span class="w"> </span><span class="n">V_OD_Env</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// 4. Set connection attributes.</span>
<span class="w"> </span><span class="n">SQLSetConnectAttr</span><span class="p">(</span><span class="n">V_OD_hdbc</span><span class="p">,</span><span class="w"> </span><span class="n">SQL_ATTR_AUTOCOMMIT</span><span class="p">,</span><span class="w"> </span><span class="n">SQL_AUTOCOMMIT_ON</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// 5. Connect to a data source. You do not need to enter the username and password if you have configured them in the odbc.ini file. If you have not configured them, specify the name and password of the user who wants to connect to the database in the SQLConnect function.</span>
<span class="w"> </span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SQLConnect</span><span class="p">(</span><span class="n">V_OD_hdbc</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">SQLCHAR</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="s">&quot;gaussdb&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">SQL_NTS</span><span class="p">,</span><span class="w"> </span>
<span class="w"> </span><span class="p">(</span><span class="n">SQLCHAR</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">SQL_NTS</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">SQLCHAR</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">SQL_NTS</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">SQL_SUCCESS</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">SQL_SUCCESS_WITH_INFO</span><span class="p">))</span><span class="w"> </span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Error SQLConnect %d\n&quot;</span><span class="p">,</span><span class="n">V_OD_erg</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">SQLFreeHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_ENV</span><span class="p">,</span><span class="w"> </span><span class="n">V_OD_Env</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Connected !\n&quot;</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// 6. Set statement attributes.</span>
<span class="w"> </span><span class="n">SQLSetStmtAttr</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="n">SQL_ATTR_QUERY_TIMEOUT</span><span class="p">,(</span><span class="n">SQLPOINTER</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 7. Apply for a statement handle.</span>
<span class="w"> </span><span class="n">SQLAllocHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_STMT</span><span class="p">,</span><span class="w"> </span><span class="n">V_OD_hdbc</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">V_OD_hstmt</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// 8. Executes an SQL statement directly.</span>
<span class="w"> </span><span class="n">SQLExecDirect</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="s">&quot;drop table IF EXISTS testtable&quot;</span><span class="p">,</span><span class="n">SQL_NTS</span><span class="p">);</span>
<span class="w"> </span><span class="n">SQLExecDirect</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="s">&quot;create table testtable(id int)&quot;</span><span class="p">,</span><span class="n">SQL_NTS</span><span class="p">);</span>
<span class="w"> </span><span class="n">SQLExecDirect</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="s">&quot;insert into testtable values(25)&quot;</span><span class="p">,</span><span class="n">SQL_NTS</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 9. Prepare for execution.</span>
<span class="w"> </span><span class="n">SQLPrepare</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="s">&quot;insert into testtable values(?)&quot;</span><span class="p">,</span><span class="n">SQL_NTS</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="c1">// 10. Bind parameters.</span>
<span class="w"> </span><span class="n">SQLBindParameter</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">SQL_PARAM_INPUT</span><span class="p">,</span><span class="n">SQL_C_SLONG</span><span class="p">,</span><span class="n">SQL_INTEGER</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span>
<span class="w"> </span><span class="o">&amp;</span><span class="n">value</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">NULL</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 11. Execute the ready statement.</span>
<span class="w"> </span><span class="n">SQLExecute</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">);</span>
<span class="w"> </span><span class="n">SQLExecDirect</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="s">&quot;select id from testtable&quot;</span><span class="p">,</span><span class="n">SQL_NTS</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 12. Obtain the attributes of a certain column in the result set.</span>
<span class="w"> </span><span class="n">SQLColAttribute</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">SQL_DESC_TYPE</span><span class="p">,</span><span class="n">typename</span><span class="p">,</span><span class="mi">100</span><span class="p">,</span><span class="n">NULL</span><span class="p">,</span><span class="n">NULL</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;SQLColAtrribute %s\n&quot;</span><span class="p">,</span><span class="n">typename</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 13. Bind the result set.</span>
<span class="w"> </span><span class="n">SQLBindCol</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">SQL_C_SLONG</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">SQLPOINTER</span><span class="p">)</span><span class="o">&amp;</span><span class="n">V_OD_buffer</span><span class="p">,</span><span class="mi">150</span><span class="p">,</span>
<span class="w"> </span><span class="p">(</span><span class="n">SQLLEN</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="o">&amp;</span><span class="n">V_OD_err</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 14. Collect data using SQLFetch.</span>
<span class="w"> </span><span class="n">V_OD_erg</span><span class="o">=</span><span class="n">SQLFetch</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 15. Obtain and return data using SQLGetData.</span>
<span class="w"> </span><span class="k">while</span><span class="p">(</span><span class="n">V_OD_erg</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">SQL_NO_DATA</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">SQLGetData</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">SQL_C_SLONG</span><span class="p">,(</span><span class="n">SQLPOINTER</span><span class="p">)</span><span class="o">&amp;</span><span class="n">V_OD_id</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">NULL</span><span class="p">);</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;SQLGetData ----ID = %d\n&quot;</span><span class="p">,</span><span class="n">V_OD_id</span><span class="p">);</span>
<span class="w"> </span><span class="n">V_OD_erg</span><span class="o">=</span><span class="n">SQLFetch</span><span class="p">(</span><span class="n">V_OD_hstmt</span><span class="p">);</span>
<span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Done !\n&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 16. Disconnect from the data source and release handles.</span>
<span class="w"> </span><span class="n">SQLFreeHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_STMT</span><span class="p">,</span><span class="n">V_OD_hstmt</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">SQLDisconnect</span><span class="p">(</span><span class="n">V_OD_hdbc</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">SQLFreeHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_DBC</span><span class="p">,</span><span class="n">V_OD_hdbc</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">SQLFreeHandle</span><span class="p">(</span><span class="n">SQL_HANDLE_ENV</span><span class="p">,</span><span class="w"> </span><span class="n">V_OD_Env</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="k">return</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
</p></li></ol>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_01_0081.html">Using the JDBC and ODBC Drivers to Connect to a Cluster</a></div>
</div>
</div>