青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

興海北路

---男兒仗劍自橫行
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

統計

  • 隨筆 - 85
  • 文章 - 0
  • 評論 - 17
  • 引用 - 0

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

收藏夾

全是知識啊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

基于C API的MySQL數據庫多線程訪問方法
摘要:目前,數據庫在各行各業中廣泛應用。在眾多商業數據庫軟件中,SQL SERVER 和ORACLE被較多的使用,因此這兩個數據庫軟件的價格也較昂貴。本文主要介紹MySQL數據庫在單線程或多線程程序環境下使用C API訪問MySQL數據庫方法,并給出了相應代碼和分析。該數據庫屬于開源數據庫,具有較高的成熟度,并且對于社區版本可以免費使用,因此對于需要使用 C API訪問數據庫的項目開發,可降低開發成本。
  關鍵詞:MySQL;C API;多線程
  中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2007)16-30904-02
  Based on C API MySQL Database Multi-threaded Access Methods
  YU Cheng-gong
  (Zhejiang Pharmaceutical College,Ningbo 315100,China)
  Abstract:Currently,the database in all walks of life were widely used.In many commercial database software,SQL Server and Oracle are used more and therefore their prices are more expensive. This paper describes the MySQL database in single-threaded or multi-threaded programming environment using C API access to the MySQL database, and gives the corresponding code and analysis. The database is open source database, with a higher maturity level, and the community version can be used for free. It satisfies the need to use the C API access to the database of project development, and reduces development costs.
  Key words:MySQL;C API;multi-threaded

  1 引言

  隨著社會信息化的深入,數據庫在社會各個領域被廣泛應用。在這些數據庫應用項目開發過程中,需要做兩方面的決策:1. 使用何種數據庫軟件;2. 采用何種方式訪問數據庫。數據庫軟件的選擇面比較寬,在目前眾多商業數據庫軟件中,SQL SERVER 和ORACLE被較多的使用,當然這兩個數據庫軟件的價格也較昂貴,本文選擇可免費使用的MySQL數據庫社區版本,MySQL庫屬于開源數據庫,具有較 高的成熟度和可靠性。數據庫的訪問方式有很多,可以使用ODBC、DAO、ADO等方法,這些方法簡單直接但是效率不高,不適合大型復雜的系統使用,例如 網絡游戲的數據庫系統開發需要考慮同時大量的數據庫訪問,因此訪問的效率非常重要。基于C程序語言的高效率,使用C API訪問數據庫可以提高數據庫的訪問效率。基于以上兩點,本文將介紹基于C API的MySQL數據庫訪問方法,給出在單線程和多線程程序環境下的具體代碼和分析。

  2 建表

  為了方便說明數據庫的訪問,先建立一個數據庫表TestTable,可以使用SQL語句創建該表,也可以使用MySQL提供的圖形界面來創建。數據庫表中字段如下:
  該數據庫表使用最常見的用戶名和密碼作為字段,本文將通過該表來實現不同程序環境下基于C API的數據庫的訪問方法。

  3 單線程程序的數據庫訪問

  單線程應用程序訪問MySQL數據庫相對簡單,其過程包含以下幾步:
  (1)初始化MySQL庫
  (2)初始化數據庫連接句柄
  (3)連接數據庫
  (4)通過SQL語句操作數據庫并處理相應數據
  (5)關閉數據庫連接
  (6)結束MySQL庫
  通過這五個步驟即可實現數據庫的訪問,具體代碼和分析如下:
  //在main主函數中添加代碼
  //1.定義訪問數據庫所需變量
  MYSQL * myData;
  MYSQL_RES * res;
  MYSQL_ROW row;
  //2. 初始化MySQL庫和數據庫連接句柄
  myData = mysql_init((MYSQL*) 0);
  //3. 連接數據庫,MYSQL_IP和MYSQL_PORT表示數據庫的IP和端口
  // MYSQL_ACCOUNT, MYSQL_PASSWORD表示數據庫連接的帳號和密碼
  //MYSQL_DBNAME表示所要訪問的數據庫名
  mysql_real_connect( myData, MYSQL_IP, MYSQL_ACCOUNT, MYSQL_PASSWORD, MYSQL_DBNAME, MYSQL_PORT,NULL, 0 )
  //4. 通過SQL語句操作數據庫并處理相應數據
  //4.1新建用戶名為abcdef,密碼為123456的記錄
  mysql_query(myData, "insert into TestTable value(‘abcdef’,’ 123456’)");
  //4.2顯示所有記錄
  //查詢所有記錄
  mysql_query(myData, "select * from TestTable");
  //將查詢結果保存到res中
  res = mysql_store_result( myData ) ;
  //逐條顯示記錄
  Int j = 0;
  while ( row = mysql_fetch_row( res ) ) {//獲取一條記錄
  j = mysql_num_fields( res ) ;//獲取每條記錄的字段數
for ( k = 0 ; k < j ; k++ )
  printf( “%s”, row[k] ) ;
  printf( “\n”) ;
  }
  //釋放res
  mysql_free_result( res ) ;
  //5. 關閉數據庫連接
  mysql_close( myData );
  //6. 結束MySQL庫
  mysql_library_end();
  關于代碼的幾點說明:
  (1)定義變量中的三個數據結構為訪問MySQL所需,MYSQL結構表示一個數據庫連接的句柄,其中包含了數據庫連接所需的參數,MYSQL_RES結構表示數據庫訪問中一個查詢的返回結果,MYSQL_ROW結構表示返回結構中的一條記錄;
  (2)獲取查詢結果res并處理完畢,必須釋放res,否則會造成內存泄露
  (3)在單線程時,步驟初始化MySQL庫和數據庫連接句柄可合并, 由mysql_init()來處理。該函數會自動調用函數mysql_library_init()來初始化MySQL庫,同時初始化連接句柄。

  4 多線程環境下的數據庫訪問

  多線程環境下的數據庫訪問需要保證線程安全。Windows版本的MySQL C API函數都是線程安全的,除了mysql_library_init(),而我們剛才的代碼中使用的mysql_init()函數會自動調用函數 mysql_library_init()來初始化MySQL庫,因此在多線程環境下,需要不同的初始化代碼和清理代碼。具體過程如下:
  (1)在主函數中調用mysql_library_init()來初始化MySQL庫;
  (2)啟動各數據庫訪問線程
  (3)主函數等待各個線程的結束
  (4)調用mysql_library_end ()清理MySQL庫。
  其中數據庫訪問線程的代碼和單線程數據庫訪問代碼類似,但是需要如下變化:
  (1)單線程中的第2步初始化MySQL庫和數據庫連接句柄,不能再使用mysql_init(),代碼應作如下修改:
  //初始化線程
  my_init();
  mysql_thread_init();
  //初始化myData
  myData = malloc(sizeof(MYSQL));
  memset(&myData, 0, sizeof(MYSQL))
  (2)上述初始化myData,只是將myData所有成員設為0,如果有需要可以根據具體情況設置該結構成員的值,例myData->reconnect= 1,其作用是設置數據庫連接屬性為重連接,即當數據庫連接斷開時,自動重新連接;
  (3)單線程中的第6步不在需要,改為結束線程的清理工作,即調用mysql_thread_end()函數。

  5 總結

  綜上所述,使用C API訪問MySQL數據庫在不同線程環境下的區別主要在于初始化和訪問結束后清理代碼,也就是說除了初始化和清理代碼,MySQL提供給我們的C API函數都是線程安全的。最后需要有一點說明,使用C API訪問數據庫可以提高數據庫的訪問效率,但并不是所有的數據庫項目都適合這種方式,該方式適合需要大量實時并發處理的數據庫項目,例如網絡游戲的數據 庫項目,對于有此需求的數據庫項目可參考本文。

  參考文獻:
  [1]MySQL AB,MySQL 5.0 Reference Manual.

  注:“本文中所涉及到的圖表、公式注解等形式請以PDF格式閱讀原文。”

posted on 2008-04-22 16:35 隨意門 閱讀(5052) 評論(1)  編輯 收藏 引用

評論

# re: 基于C API的MySQL數據庫多線程訪問方法 2013-11-26 14:00 ysw

memset(&myData, 0, sizeof(MYSQL))
應該為: memset(myData, 0, sizeof(MYSQL))
  回復  更多評論    
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美1区3d| 国产精品视频| 亚洲视频网在线直播| 亚洲成人直播| 欧美激情国产日韩| 亚洲国产精品久久人人爱蜜臀| 欧美粗暴jizz性欧美20| 亚洲福利视频在线| 99精品视频一区| 亚洲午夜精品久久久久久浪潮| 日韩一区二区精品在线观看| 亚洲综合日韩在线| 久久久久一区| 欧美日韩精品| 国产一区二区三区久久精品| 亚洲欧洲日本一区二区三区| 亚洲欧美国产视频| 毛片av中文字幕一区二区| 亚洲激情网站免费观看| 一区二区三区精品久久久| 欧美在线一级va免费观看| 蜜桃久久av一区| 国产精品久久久久久亚洲毛片| 在线播放国产一区中文字幕剧情欧美| 亚洲精品一区二区三区婷婷月| 欧美一级欧美一级在线播放| 欧美成人久久| 亚洲欧美日韩在线综合| 欧美激情欧美激情在线五月| 久久久久久午夜| 欧美福利在线| 欧美欧美在线| 国产午夜精品久久久| 亚洲全黄一级网站| 欧美中文字幕在线播放| 亚洲日本成人在线观看| 欧美中文在线字幕| 欧美体内谢she精2性欧美| 在线观看一区二区精品视频| 午夜精彩国产免费不卡不顿大片| 欧美寡妇偷汉性猛交| 欧美一区二区视频在线观看| 欧美大胆成人| 国模精品一区二区三区| 亚洲免费视频成人| 亚洲九九精品| 欧美成人精品影院| 伊人久久亚洲热| 久久精品国产亚洲一区二区| 亚洲少妇诱惑| 欧美日韩视频在线一区二区观看视频| 1024欧美极品| 久久免费视频在线观看| 亚洲欧美日韩专区| 国产精品揄拍一区二区| 亚洲一区二区三区成人在线视频精品 | 久久精视频免费在线久久完整在线看 | 亚洲毛片在线观看.| 久久人人九九| 久久成人一区二区| 国产在线一区二区三区四区 | 欧美大片一区二区| 久久精品免费| 亚洲成人在线观看视频| 美日韩精品视频免费看| 久久久久中文| 亚洲第一在线综合网站| 欧美成人精品福利| 欧美va亚洲va日韩∨a综合色| 亚洲国产天堂久久综合| 亚洲成在人线av| 欧美激情精品久久久久| aa级大片欧美| 一区二区三区高清视频在线观看| 欧美日韩国产小视频在线观看| 亚洲视频一区| 亚洲欧美三级伦理| 狠狠色丁香婷综合久久| 欧美国产精品一区| 欧美激情五月| 西西裸体人体做爰大胆久久久| 校园春色国产精品| 亚洲丰满在线| 亚洲成色777777在线观看影院| 在线国产精品一区| 亚洲国产成人高清精品| 欧美精品一区二区蜜臀亚洲 | 久久精品一级爱片| 久久久另类综合| 9人人澡人人爽人人精品| 亚洲一区二区三区在线播放| 狠狠色2019综合网| av成人老司机| 亚洲国产精品一区二区三区| 一区二区高清视频在线观看| 韩日午夜在线资源一区二区| 最新中文字幕一区二区三区| 国产精品一区二区久久久久 | 亚洲无限av看| 黄色小说综合网站| 日韩午夜电影在线观看| 国产一区久久久| 亚洲人成免费| 精品粉嫩aⅴ一区二区三区四区| 亚洲毛片av在线| 国产亚洲一级| 99精品久久免费看蜜臀剧情介绍| 国产视频一区二区在线观看 | 久久久xxx| 在线亚洲免费视频| 久久成人免费| 午夜国产精品视频免费体验区| 牛牛影视久久网| 久久久精品动漫| 欧美午夜精品久久久久久孕妇 | 久久精品一区二区三区不卡牛牛| 久久免费精品日本久久中文字幕| 亚洲欧美在线高清| 欧美激情在线狂野欧美精品| 久久久久欧美精品| 国产精品毛片| 亚洲国产精品尤物yw在线观看| 国产一区二区三区自拍| 亚洲一区二区欧美| 99国产麻豆精品| 久久看片网站| 久久在线免费观看视频| 国产视频一区在线观看一区免费| 亚洲伦理网站| 亚洲免费福利视频| 免费在线视频一区| 免费人成网站在线观看欧美高清| 国产精品久久久一区二区| 亚洲精品乱码视频| 亚洲精品美女久久久久| 久久婷婷丁香| 欧美大香线蕉线伊人久久国产精品| 国内精品视频在线观看| 欧美主播一区二区三区| 久久久福利视频| 国产一区久久久| 久久精品国产精品亚洲综合 | 99综合电影在线视频| 亚洲精品国产精品乱码不99按摩| 久久亚洲午夜电影| 免费观看在线综合色| 精品69视频一区二区三区| 久久精品国产91精品亚洲| 久久久久久免费| 激情综合色综合久久| 久久亚洲色图| 欧美激情一区二区三区高清视频| 亚洲精品黄网在线观看| 欧美刺激性大交免费视频| 亚洲高清久久| 一本色道久久综合狠狠躁篇的优点| 欧美片网站免费| 亚洲在线观看免费| 久久久91精品国产一区二区三区 | 亚洲精品乱码| 欧美精品一区二区三区蜜桃| 亚洲国产欧美在线| 亚洲午夜精品久久久久久app| 欧美色图首页| 久久精彩免费视频| 欧美成人精品不卡视频在线观看 | 欧美天堂亚洲电影院在线播放| 亚洲欧洲综合另类| 免费成人av在线| 99热免费精品| 午夜日韩在线观看| 国产在线成人| 欧美成人久久| 亚洲欧美日韩久久精品 | 亚洲人妖在线| 午夜精品久久99蜜桃的功能介绍| 国产色婷婷国产综合在线理论片a| 久久精品男女| 亚洲精品之草原avav久久| 亚洲欧美日韩另类精品一区二区三区| 国内精品写真在线观看| 欧美日韩精品在线播放| 久久国产精品亚洲77777| 亚洲黄色在线看| 午夜亚洲伦理| 洋洋av久久久久久久一区| 国产综合色一区二区三区| 欧美大片免费| 久久久久久久久久久久久女国产乱 | 麻豆免费精品视频| 99精品99| 可以看av的网站久久看| 亚洲一区二区影院| 亚洲国产精品成人一区二区| 亚洲欧美高清| 亚洲国产日韩欧美| 欧美在线免费视屏| 亚洲麻豆一区| 一区二区三区在线视频播放| 欧美午夜剧场|