程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 提前認識軟件開發(20) 如何在C語言裡面執行SQL語句

提前認識軟件開發(20) 如何在C語言裡面執行SQL語句

編輯:關於C語言

在通信類軟件中,程序經常需要與數據庫打交道。為了實現諸如從數據庫中獲取數據、更新數據庫表某字段、插入或刪除某條數據等功能,就需要在C語言程序中構造一些SQL語句,並用函數來執行這些SQL語句。

本文介紹如何在C語言程序中構造並執行SQL語句,為相關軟件開發工作的開展提供了參考。

一、為什麼要在C語言程序中執行SQL語句?

在C語言程序中執行SQL語句的原因有以下幾個:

(1) 程序需要獲取數據庫中某數據表的字段值,並對這些字段值進行解析以執行後續操作。

(2) 程序需要更新數據庫中某數據表的字段值。

(3) 程序需要向某數據表中插入值。

(4) 程序需要從某數據表中刪除一些值。

(5) 程序需要執行某存儲過程以完成特定的操作。

可以看出,在C語言程序中,不只要求能夠執行“select”、“update”、“insert”、“delete”等語句,還要求能夠執行存儲過程。

二、C語言程序與數據庫打交道的方式

C語言程序與數據庫打交道的方式分為直連(同步)和非直連(異步)兩種,它們的特點如下所示:

1. 直連方式

在該方式中,C語言程序直接與數據庫進行消息的交互,如圖1所示。

圖1 直連方式示意圖

該方式的優點是消息交互是即時的,C語言程序向數據庫發送消息之後,很快就能夠得到結果;缺點是如果數據庫執行緩慢,那麼C語言程序需要掛在那裡等待結果,影響了程序執行效率。

從圖3可以看出,直連方式下C語言程序與數據庫進行消息交互的流程一般包括以下幾個步驟:

(1) 獲取對應的數據庫連接,在連接失敗的情況下進行重試。要執行SQL語句,首先需要連接到對應的數據庫,即獲取對應的數據庫連接句柄。在第一次連接失敗的情況下,要進行重連。每個項目組規定了數據庫重連的次數,一般為二到三次。如果多次重連之後仍然不成功,那麼程序就直接返回錯誤,不再執行後續流程。這時就需要查找連接失敗的原因。

(2) 在連接成功之後,就要構造特定的SQL語句並調用函數執行該SQL語句。這些SQL語句不僅包括“select”、“update”、“insert”、“delete”等語句,還包括執行存儲過程的語句。如果執行成功,則繼續執行後續流程;如果執行失敗,則關閉對應的數據庫連接並退出程序。因為之前連接數據庫是成功的,所以本步執行失敗,就需要查看是否是SQL語句構造得有問題。

(3) SQL語句執行成功之後,如果該SQL語句有返回結果,就需要調用函數來獲取該結果,同時對結果進行解析;如果該SQL語句沒有返回結果,那麼就直接執行後續流程。如果獲取和解析結果失敗,則關閉對應的數據庫連接並退出程序;如果解析成功,那麼就繼續執行後續流程。

(4) 注意,如果一個程序裡面創建過數據庫連接,在該程序執行結束或退出之前,一定要記得將數據庫連接關閉掉,防止數據庫連接句柄被錯誤使用。

四、直連方式下的C語言程序框架

根據圖3的消息交互流程,直連方式下的C語言程序框架如下所示:

……
    
……
    
// 獲取對應的數據庫連接
    
if (hDbConn == NULL)                // hDbConn為數據庫句柄
    
{
    
    hDbConn = GetDBConn(…);        // 第一次連接
    
    if (hDbConn == NULL)            // 連接失敗,再重試一次
    
    {
    
        hDbConn = GetDBConn(…);    // 第二次連接
    
        if (hDbConn == NULL) // 第二次連接失敗,程序直接返回,不執行後續流程
    
        {
    
            return;
    
        }
    
    }
    
}
    
     
    
// 構造特定的SQL語句並調用函數執行該SQL語句
    
……
    
……
    
iRetValue = ExecuteSql(hDbConn, szSQL, …);  // szSQL裡面存放特定的SQL語句
    
if (iRetValue == -1)            // 返回值為-1表示執行失敗
    
{
    
    if (hDbConn != NULL)     // 數據庫連接句柄不為空
    
    {
    
        CloseDb(hDbConn);   // 關閉數據庫連接
    
        hDbConn = NULL;    // 注意,要把hDbConn指針置為空
    
    }
    
    return;                   // 執行失敗後直接返回
    
}
    
     
    
// 如果該SQL語句有返回值,就需要獲取該結果;無返回值則不需要執行以下流程
    
iRetValue = Fetch(hDbConn, szDBBuf, sizeof(szDBBuf)); // 將返回結果放到szDBBuf中
    
if (iRetValue == -1)           // 返回值為-1表示執行失敗
    
{
    
    if (hDbConn != NULL)    // 數據庫連接句柄不為空
    
    {
    
        CloseDb(hDbConn);  // 關閉數據庫連接
    
        hDbConn = NULL;   // 注意,要把hDbConn指針置為空
    
    }
    
    return;                  // 執行失敗後直接返回
    
}
    
     
    
// 繼續執行後續流程
    
……
    
……
    
// 在程序返回之前要再次檢查並關閉數據庫句柄
    
if (NULL != hDbConn)
    
{
    
    CloseDb(hDbConn);
    
    hDbConn = NULL;
    
}
    
     
    
return;

五、總結

本文對直連方式下C語言程序如何與數據庫進行消息交互作了詳細的介紹,並結合流程圖展示了直連方式下的C語言程序框架。

在C語言程序與數據庫打交道的過程中,我們要注意以下問題:

(1) 獲取數據庫連接句柄之後,在使用它之前要首先檢查該句柄指針是否為空;如果為空,則要對數據庫進行重連。

(2) 在執行SQL語句的過程中,如果遇到異常結果,可從兩個方面入手來檢查:第一,檢查配置文件中數據庫的各項配置是否正確,數據庫本身是否運行良好;第二,檢查C程序代碼是否書寫正確,特別是SQL語句是否書寫正確。

(3) 不管在代碼的什麼位置,在程序退出之前,一定要釋放數據庫連接的句柄,以免其被誤用。

在實際的軟件開發項目中,C語言程序和數據庫打交道可謂是家常便飯。本文介紹了C語言程序與數據庫交互的具體流程,為相關軟件開發工作的順利開展提供了有益的參考。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved