熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

在 MySQL 數據庫中使用C 執行SQL的語句

2022-06-13   來源: MySQL 

  與 PostgreSQL 相似可使用許多不同的語言來訪問 MySQL包括 CC++Java 和 Perl從 Professional Linux Programming 中第 章有關 MySQL 的下列章節中Neil Matthew 和 Richard Stones 使用詳盡的 MySQL C 接口向我們介紹了如何在 MySQL 數據庫中執行 SQL 語句他們將看看返回數據的語句例如 INSERT 以及不返回數據的語句例如 UPDATE 和 DELETE然後他們將編寫從數據庫檢索數據的簡單程序
  
  執行 SQL 語句
  現在我們已經有了一個連接並且知道如何處理錯誤是時候討論使用我們的數據庫來作一些實際工作了執行所有類型的 SQL 的主關鍵字是 mysql_query
  
  int mysql_query(MYSQL *connection const char *query)
  
  正如您所見它非常簡單它取一個指向連接結構的指針和包含要執行的 SQL 的文本字符串與命令行工具不同將不使用結束分號成功之後返回 在需要包含二進制數據的特殊情況下可以使用相關的函數mysql_real_query雖然出於本章的目的我們僅需要討論 mysql_query
  
  不返回數據的 SQL 語句
  我們將先討論 UPDATEDELETE 和 INSERT 語句因為它們不返回數據所以更易於使用
  
  這裡我們將介紹的另一個重要函數是檢查受影響的行數的函數
  
  my_ulonglong mysql_affected_rows(MYSQL *connection);
  
  可能關於這一函數的最顯而易見的事就是其非同尋常的返回結果由於可移植性原因這是一個特殊的無符號類型為了在 printf 中使用建議將其強制轉換成使用 %lu 格式規范的無符號長整數這個函數返回受以前的 UPDATEINSERT 或 DELETE 查詢影響的行數這些查詢是使用 mysql_query 執行的
  
  通常對於 mysql_ 函數返回碼 表示沒有行受影響正數表示實際結果通常是受影響的行數
  
  如前所述當使用 mysql_affected_rows 時可能出現未期望的結果讓我們先討論受 INSERT 語句影響的行數它將按預期進行操作將下列代碼添加到程序 connectc 中並且稱其為 insertc
  
  #include
     #include
  
     #include mysqlh
  
     int main(int argc char *argv[]) {
      MYSQL my_connection;
  
      int res;
  
      mysql_init(&my_connection);
      if (mysql_real_connect(&my_connection localhost
                 
                  rick bar rick NULL )) {
        printf(Connection success\n);
  
        res = mysql_query(&my_connection INSERT INTO children(fnameage)
                             
                                VALUES(Ann));
        if (!res) {
        
         printf(Inserted %lu rows\n
             (unsigned long)mysql_affected_rows(&my_connection));
        } else {
        
       fprintf(stderr Insert error %d: s\nmysql_errno(&my_connection)             
                          mysql_error(&my_connection));
        }
  
        mysql_close(&my_connection);
      } else {
       
       fprintf(stderr Connection failed\n);
        if (mysql_errno(&my_connection)) {
        fprintf(stderr Connection error %d: %s\n
          mysql_errno(&my_connection)mysql_error(&my_connection));
        }
      }
  
      return EXIT_SUCCESS;
    }
  
  
  正如預期插入的行數為
  
  現在我們更改代碼所以 insert 部分被替換成
  
  mysql_errno(&my_connection) mysql_error(&my_connection));
      }
     }
  
     res = mysql_query(&my_connection UPDATE children SET AGE =
    
  WHERE fname = Ann);
  
     if (!res) {
      printf(Updated %lu rows\n
              
  (unsigned long)mysql_affected_rows(&my_connection));
     } else {
     
  fprintf(stderr Update error %d: %s\n
  mysql_errno(&my_connection)
From:http://tw.wingwit.com/Article/program/MySQL/201311/29370.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.