Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166374
  • 博文数量: 162
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1501
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-21 19:45
文章分类
文章存档

2018年(1)

2017年(101)

2016年(60)

分类: C/C++

2017-05-13 15:08:15

C++连接MySQL数据库

C++不像PHP那样智能,没有集成的wamp环境,因此,C++连接数据库也就没有那么方便。上网查了些资料,终于连接成功了,记录下过程 。

1.在电脑上安装mysql

这一步网上有人说必须选择custmo模式,不过我安装时没有选择,也连接成功了。貌似没有那个必要。

2.下载mysql头文件

这个 必须要有,下载好后,把里面的.h文件放到codeblocks的Include文件夹下。这上步的目的是在写程序中,可以引用mysql.h等头文件。

3.在codeblocks中的project -> build options ->setting and link ,添加,找到libmysql.lib,mysqlclient.lib,mysqld.lib这三个文件,把这三个文件的路径全部加过去,目的是使codeblocks能够找到并编译。如果是默认安装的话,这三个文件所在的位置是C:\Program Files\MySQL\MySQL Server 5.1\lib,每个人的位置可能不一样。

4.这时试着连接数据库,如果不能够连接成功,则可能会出现“没有找到libmysql.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”解决方法:

4.1:将C:\mysql\lib\opt目录下的libmysql.dll拷贝到 C:\WINDOWS\system32目录下

4.2:将libmysql.dll拷贝到.exe所在的文件下


最后附一个连接成功的代码:

[cpp] view plain copy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5.   
  6. using namespace std;  
  7.   
  8. /*数据库连接用宏*/  
  9. #define HOST "localhost"  
  10. #define USERNAME "root"  
  11. #define PASSWORD " "  
  12. #define DATABASE "test"  
  13.   
  14. void query_sql(char* sql)  
  15. {  
  16.     MYSQL my_connection; /*这是一个数据库连接*/  
  17.     int res; /*执行sql語句后的返回标志*/  
  18.     MYSQL_RES *res_ptr; /*指向查询结果的指针*/  
  19.     MYSQL_FIELD *field; /*字段结构指针*/  
  20.     MYSQL_ROW result_row; /*按行返回的查询信息*/  
  21.     int row, column; /*查询返回的行数和列数*/  
  22.     int i, j;  
  23.     /*初始化mysql连接my_connection*/  
  24.     mysql_init(&my_connection);  
  25.     /*建立mysql连接*/  
  26.     if (NULL != mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,  
  27.                                    DATABASE, 0, NULL, 0))  /*连接成功*/  
  28.     {  
  29.         printf("数据库查询query_sql连接成功!\n");  
  30.         /*设置查询编码为gbk,以支持中文*/  
  31.         mysql_query(&my_connection, "set names gbk");  
  32.         res = mysql_query(&my_connection, sql);  
  33.   
  34.         cout << "res = " << res << endl;  
  35.   
  36.         if (res)   /*执行失败*/  
  37.         {  
  38.             printf("Error: mysql_query !\n");  
  39.             cout << mysql_error(&my_connection) << endl;  
  40.             /*关闭连接*/  
  41.             mysql_close(&my_connection);  
  42.         }  
  43.         else     /*现在就代表执行成功了*/  
  44.         {  
  45.             /*将查询的結果给res_ptr*/  
  46.             res_ptr = mysql_store_result(&my_connection);  
  47.             /*如果结果不为空,就把结果print*/  
  48.             if (res_ptr)  
  49.             {  
  50.                 /*取得結果的行数和*/  
  51.                 column = mysql_num_fields(res_ptr);  
  52.                 row = mysql_num_rows(res_ptr);  
  53.                 printf("查询到 %d 行 \n", row);  
  54.                 /*输出結果的字段名*/  
  55.                 for (i = 0; field = mysql_fetch_field(res_ptr); i++)  
  56.                     printf("%10s ", field->name);  
  57.                 printf("\n");  
  58.                 /*按行输出結果*/  
  59.                 for (i = 1; i < row+1; i++)  
  60.                 {  
  61.                     result_row = mysql_fetch_row(res_ptr);  
  62.                     for (j = 0; j < column; j++)  
  63.                         printf("%10s ", result_row[j]);  
  64.                     printf("\n");  
  65.                 }  
  66.             }  
  67.             /*不要忘了关闭连接*/  
  68.             mysql_close(&my_connection);  
  69.         }  
  70.     }  
  71.     else  
  72.     {  
  73.         printf("数据库连接失败");  
  74.     }  
  75. }  
  76.   
  77. int main()  
  78. {  
  79.     char *query;  
  80.     query="select * from student";  
  81.     query_sql(query);  
  82.     return 0;  
  83. }  
阅读(423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~