C語言定義的操作mysql數據庫的接口
阿新 • • 發佈:2017-10-02
oca 個數 hid isp efi 否則 nds 判斷 basename
編寫的環境:centos7系統下,對mysql的衍生mariadb進行數據庫的操作,包含設置訪問數據庫的參數,查詢數據庫和增刪改數據庫的三個功能。對於查詢數據庫,我這裏允許不返回查詢結果,用於判斷查詢是否成功的功能編寫上。
先上頭文件
1 /* 該文件用於描述訪問數據庫的接口聲明 */ 2 #ifndef _OPERATE_DB_H_ 3 #define _OPERATE_DB_H_ 4 #include <mysql.h> 5 #include "status.h" 6 7 /* 8 * 訪問數據庫的字符串的最大長度 9 */ 10 #define QUERY_MAX_SIZE 1024 11operateDb.h12 /* 13 * 設置訪問數據庫參數 14 * _localhost -- 訪問數據庫的主機名 15 * _userName -- 訪問數據庫的用戶名 16 * _password -- 對應的密碼 17 * _databaseName -- 要操作的數據庫名字 18 * 返回結果狀態值,如果沒有異常返回OK;否則返回ERROR 19 */ 20 STATUS 21 InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName );22 23 /* 24 * 操作數據庫 25 * commandString -- 存放SQL操作命令 26 * 如果操作成功返回OK;否則返回ERROR 27 */ 28 STATUS 29 UpdateDatabase( char const *commandString ); 30 31 /* 32 * 查詢數據庫 33 * commandString -- 查詢sql命令 34 * resultp -- 指向存放查詢結果的雙指針 35 * 返回結果狀態值,如果操作成功返回OK;否則返回ERROR 36 */ 37 STATUS 38 QueryDatabase( char const*commandString, MYSQL_RES **resultpp ); 39 #endif
再上接口定義
1 /* 該文件用於描述訪問數據庫的接口定義 */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <mysql.h> 5 #include "operateDb.h" 6 #include "status.h" 7 8 /* 9 * 內部數據 10 */ 11 static char const *localhost = NULL; //主機名 12 static char const *userName = NULL; //mysql用戶名 13 static char const *password = NULL; //它的密碼 14 static char const *databaseName = NULL; //所要操作的數據庫 15 16 /* 17 * 外部接口 18 * 19 * 20 * 設置訪問數據庫參數 21 * _localhost -- 訪問數據庫的主機名 22 * _userName -- 訪問數據庫的用戶名 23 * _password -- 對應的密碼 24 * _databaseName -- 要操作的數據庫名字 25 * 返回結果狀態值,如果沒有異常返回OK;否則返回ERROR 26 */ 27 STATUS 28 InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName ) 29 { 30 if(_localhost == NULL) //檢查參數是否有效 31 { 32 fprintf(stdout, "傳遞給函數InitDbParms的參數_localhost無效。\n"); 33 return ERROR; 34 } 35 if(_userName == NULL) 36 { 37 fprintf(stdout, "傳遞給函數InitDbParms的參數_userName無效。\n"); 38 return ERROR; 39 } 40 if(_databaseName == NULL) 41 { 42 fprintf(stdout, "傳遞給函數InitDbParms的參數_databaseName無效。\n"); 43 return ERROR; 44 } 45 46 localhost = _localhost; 47 userName = _userName; 48 password = _password; 49 databaseName = _databaseName; 50 return OK; 51 } 52 53 /* 54 * 操作數據庫 55 * commandString -- 存放SQL操作命令 56 * 如果操作成功返回OK;否則返回ERROR 57 */ 58 STATUS 59 UpdateDatabase( char const *commandString ) 60 { 61 MYSQL the_conn; 62 63 if(commandString == NULL) //檢查參數是否有效 64 { 65 fprintf(stdout, "傳遞給函數UpdateDatabase的參數commandString無效。\n"); 66 return ERROR; 67 } 68 69 if( mysql_init( &the_conn ) == NULL ) //獲取本次連接的句柄 70 { 71 fprintf(stdout, "Error at mysql_init().\n"); 72 exit( EXIT_FAILURE ); 73 } 74 75 if( mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL ) //連接數據庫 76 { 77 fprintf(stdout, "Error at mysql_real_connect().\n"); 78 exit( EXIT_FAILURE ); 79 } 80 81 if( mysql_query( &the_conn, commandString ) != 0 ) //操作數據庫 82 { 83 fprintf(stdout, "Error at mysql_query().\n"); 84 exit(EXIT_FAILURE); 85 } 86 mysql_close( &the_conn ); //斷開連接 87 return OK; 88 } 89 90 /* 91 * 查詢數據庫 92 * commandString -- 查詢sql命令 93 * resultpp -- 指向存放查詢結果的雙指針 94 * 返回結果狀態值,如果操作成功返回OK;否則返回ERROR 95 */ 96 STATUS 97 QueryDatabase( char const *commandString, MYSQL_RES **resultpp ) 98 { 99 MYSQL the_conn; 100 MYSQL_RES *resultp = NULL; 101 102 if(commandString == NULL) //檢查參數是否有效 103 { 104 fprintf(stdout, "傳遞給函數QueryDatabase的參數commandString無效。\n"); 105 return ERROR; 106 } 107 108 if(mysql_init( &the_conn ) == NULL) //獲取本次連接的句柄 109 { 110 fprintf(stdout, "Error at mysql_init().\n"); 111 exit( EXIT_FAILURE ); 112 } 113 114 if(mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL) //連接數據庫 115 { 116 fprintf(stdout, "Error at mysql_real_connect().\n"); 117 exit( EXIT_FAILURE ); 118 } 119 120 if(mysql_query( &the_conn, commandString ) != 0) //操作數據庫 121 { 122 fprintf(stdout, "Error at mysql_query().\n"); 123 exit( EXIT_FAILURE ); 124 } 125 126 resultp = mysql_store_result(&the_conn); //獲取查詢結果 127 mysql_close(&the_conn); //斷開連接 128 129 if( mysql_num_rows(resultp) != 0 ) //如果查詢結果個數不為0 130 { 131 if(resultpp == NULL) //判斷是否需要返回查詢結果 132 { 133 mysql_free_result(resultp); 134 } 135 else 136 { 137 *resultpp = resultp; //返回查詢結果 138 } 139 return OK; 140 } 141 else 142 { 143 if(resultpp == NULL) 144 { 145 mysql_free_result(resultp); 146 } 147 else 148 { 149 *resultpp = resultp = NULL; 150 } 151 return ERROR; 152 } 153 }operateDb.c
~ 望路過的人,給點兒光熱。~
C語言定義的操作mysql數據庫的接口