标签:error turn == printf 主机 stat pen password splay
编写的环境: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 11 12 /* 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 }
~ 望路过的人,给点儿光热。~
标签:error turn == printf 主机 stat pen password splay
原文地址:http://www.cnblogs.com/the-one/p/7620397.html