首先,环境是windows + vs2008,Mysql数据库已经安装好,在使用之前,需要配置工程属性,附加包含目录添加
D:\Program Files\MySQL\MySQL Server 5.6\include (Mysql安装目录),附加库目录添加 D:\Program Files\MySQL\MySQL Server 5.6\lib ,附加依赖项添加 mysqlib.lib,当然mysqllib.lib 只是包含符号而已,可执行文件运行的时候需要mysqllib.dll(lib目录下), 将其拷贝到exe同目录下。
一、常用Mysql C API 介绍和使用
1.mysql_init
MYSQL结构代表一个连接句柄 MYSQL*mysql_init(MYSQL*mysql); 如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。2.mysql_real_connect
// 连接数据库 MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
//设置数据库
my_bool reconnect = true;
mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect);
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk");
3.mysql_query
int mysql_query(MYSQL *mysql, const char *query)
mysql_affected_rows
mysql_store_result
mysql_num_fields
mysql_num_rows
mysql_fetch_field
mysql_fetch_row
mysql_free_result
示例代码如下:
C++ Code
|
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#include #include #include int main(void) { //初始化一个连接句柄 MYSQL* mysql = mysql_init(NULL); if (mysql == NULL) { printf("error:%s", mysql_error(mysql)); return 1; } my_bool reconnect = true; mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk"); if (!mysql_real_connect(mysql, "localhost", "root", "123456", "scott", 0, NULL, 0)) { printf("error:%s", mysql_error(mysql)); return 1; } // 没有返回结果集的操作 int result; result = mysql_query(mysql, "insert into emp values(8888, 'YYYY', 'CLERK', 7782, '1990-04-10', 1500, NULL, 50);"); if (result != 0) { printf("error:%s", mysql_error(mysql)); return 1; } printf("%llu 行受影响\n", mysql_affected_rows(mysql)); // 有返回结果集的操作 result = mysql_query(mysql, "select * from emp where deptno=30;"); if (result != 0) { printf("error:%s", mysql_error(mysql)); return 1; } MYSQL_RES* mysql_res; MYSQL_FIELD* mysql_field; MYSQL_ROW mysql_row; unsigned int cols; mysql_res = mysql_store_result(mysql); cols = mysql_num_fields(mysql_res); if (mysql_res != NULL) { printf("返回%llu行\n", mysql_num_rows(mysql_res)); while((mysql_field = mysql_fetch_field(mysql_res))) { printf("%s\t", mysql_field->name); } printf("\n"); while((mysql_row = mysql_fetch_row(mysql_res))) { for (unsigned int i = 0; i < cols; i++) { printf("%s\t", mysql_row[i] mysql_row[i]: "NULL"); } printf("\n"); } mysql_free_result(mysql_res); } mysql_close(mysql); return 0; } |
输出结果如下,因为各字段值长短不一,虽然加了tab,输出还是有点别扭:
二、下面封装MysqlDB类
使用的基本是上面演示过的函数,就不多解释了,直接看代码吧。
MysqlDB.h: C++ Code
|
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
#ifndef _MYSQL_DB_H_ #define _MYSQL_DB_H_ //#define WIN32_LEAN_AND_MEAN #include #include #include #include using namespace std; namespace DAL { class MysqlDB; class MysqlRecordset { frie |