<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 33.2\. 管理數據庫連接 本節描述了如何打開,關閉,以及切換數據庫連接。 ## 33.2.1\. 與數據庫服務器連接 用下面的語句與一個數據庫連接: ``` EXEC SQL CONNECT TO _target_ [AS `_connection-name_`] [USER `_user-name_`]; ``` `_target_`可以通過下面的方法聲明: * `_dbname_`[@`_hostname_`][:`_port_`] * `tcp:postgresql://``_hostname_`[:`_port_`][/`_dbname_`][?`_options_`] * `unix:postgresql://``_hostname_`[:`_port_`][/`_dbname_`][?`_options_`] * 一個包含上面形式的SQL字串文本 * 一個對包含上面的形式之一的字符串變量的引用 * `DEFAULT` 如果你用文本聲明連接目標(也就是說,不是通過一個變量引用), 而且你也不引用這個數值,那么使用普通SQL的大小寫無關的規則。 這種情況下,你也可以根據需要獨立地對參數使用雙引號包圍。 實際上,可能用一個(單引號包圍)的 字串文本或者變量引用作為連接目標可能更結實一些。 連接目標`DEFAULT`發起一個用缺省用戶名對缺省數據庫地連接。 這個時候不應該聲明用戶名或連接名。 聲明用戶名的方法也有幾種不同方式: * `_username_` * `_username_`/`_password_` * `_username_` IDENTIFIED BY `_password_` * `_username_` USING `_password_` 正如上面的一樣,參數用戶名和密碼可以是一個SQL標識, 一個字符變量,或者一個字符串。 `_連接名_`用于處理一個程序里的多個連接。 如果一個程序只使用一個連接,則可以省略它。 最近打開的連接成為當前連接, 在準備執行SQL語句的時候,缺省時會使用這個連接(參閱本章稍后部分)。 這里是一些`CONNECT`語句的例子: ``` EXEC SQL CONNECT TO mydb@sql.mydomain.com; EXEC SQL CONNECT TO unix:postgresql://sql.mydomain.com/mydb AS myconnection USER john; EXEC SQL BEGIN DECLARE SECTION; const char *target = "mydb@sql.mydomain.com"; const char *user = "john"; const char *passwd = "secret"; EXEC SQL END DECLARE SECTION; ... EXEC SQL CONNECT TO :target USER :user USING :passwd; /* or EXEC SQL CONNECT TO :target USER :user/:passwd; */ ``` 最后的一個形式使用了上面說過的變量引用的方法。 在后面的小節里你會看到在SQL語句里如何使用前綴了冒號的C變量。 請注意連接目標的格式沒有在SQL標準里說明。所以, 如果你想開發可以移植的應用, 你可能會想使用類似上面的最后一個例子這樣的方法來把連接目標字串封裝在某處。 ## 33.2.2\. 選擇一個連接 在當前連接中缺省執行嵌入SQL程序的SQL語句,也就是說,最近打開的。 如果應用需要管理多個連接,那么有兩種處理方法。 第一個選項是為每個SQL語句明確選擇一個連接,比如: ``` EXEC SQL AT _connection-name_ SELECT ...; ``` 如果在混合順序中應用程序需要使用若干個連接時,這個選項特別適合。 如果你的應用程序使用多個執行線程,他們不能同時共享連接。 你要么明確控制訪問連接(使用互斥鎖)或者為每個線程使用一個連接。 如果每個線程使用自己的連接,你將需要使用AT子句指定線程將使用哪個連接。 第二個選項是執行語句切換當前連接。語句是: ``` EXEC SQL SET CONNECTION _connection-name_; ``` 如果在同一個連接上執行許多語句,那么這種選擇很方便。它不是線程感知的。 這里有一個管理多個數據庫連接的例子程序: ``` #include <stdio.h> EXEC SQL BEGIN DECLARE SECTION; char dbname[1024]; EXEC SQL END DECLARE SECTION; int main() { EXEC SQL CONNECT TO testdb1 AS con1 USER testuser; EXEC SQL CONNECT TO testdb2 AS con2 USER testuser; EXEC SQL CONNECT TO testdb3 AS con3 USER testuser; /*在最后打開的數據庫"testdb3"中執行該查詢*/ EXEC SQL SELECT current_database() INTO :dbname; printf("current=%s (should be testdb3)\n", dbname); /*在"testdb2"中使用"AT"運行查詢*/ EXEC SQL AT con2 SELECT current_database() INTO :dbname; printf("current=%s (should be testdb2)\n", dbname); /*切換當前連接到"testdb1" */ EXEC SQL SET CONNECTION con1; EXEC SQL SELECT current_database() INTO :dbname; printf("current=%s (should be testdb1)\n", dbname); EXEC SQL DISCONNECT ALL; return 0; } ``` 這個例子可能產生這樣的輸出: ``` current=testdb3 (should be testdb3) current=testdb2 (should be testdb2) current=testdb1 (should be testdb1) ``` ## 33.2.3\. 關閉一個連接 使用下面的語句關閉連接: ``` EXEC SQL DISCONNECT [`_connection_`]; ``` 通過下面的方法聲明`_連接_`: * `_連接名_` * `缺省` * `當前` * `所有` 如果沒有聲明連接名,那么關閉當前連接。 應用保持明確關閉每次打開的連接是一個很好的習慣。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看