c语言操作mysql

1 C语言连接mysql简介
    C代码的API是随MySQL一起发布的. 它包含在mysqlclient库中, 可以使C程序来访问数据库.
    MySQL源码包中的许多客户端都是用C写的. 如果你正在找使用这些C API的例子, 可以看看客户端的写法.你可以在MySQL源码包的clients目录找到这些例子.
2 测试环境
    操作系统:Red Hat Enterprise Linux Server release 6.4 
    mysql版本:mysql-5.5.28
3 编程实例
[cpp]  view plain  copy
  1. #include <stdio.h>  
  2. #include "/usr/local/mysql/include/mysql.h"  
  3. void printResult(MYSQL *mysql);  
  4. int main()  
  5. {  
  6.     MYSQL mysql;  
  7.     MYSQL_RES * result;  
  8.     mysql_init(&mysql);  
  9.     mysql_real_connect(&mysql, "127.0.0.1""root""jesse", NULL, 3355, NULL, 0);   
  10.     mysql_query(&mysql, "set names 'utf8'");  
  11.     mysql_query(&mysql, "drop database if exists tmpdb");  
  12.     mysql_query(&mysql, "create database tmpdb");  
  13.     mysql_query(&mysql, "use tmpdb");  
  14.     mysql_query(&mysql, "create table tmptab(c1 int, c2 varchar(20), c3 varchar(20))");  
  15.     mysql_query(&mysql, "insert into tmptab values(101, '姓名1', 'address1'), (102, '姓名2', 'address2'), (103, '姓名3', 'address3')");  
  16.     mysql_query(&mysql, "select * from tmptab");  
  17.     printf("--增加数据测试--\n");  
  18.     printResult(&mysql);  
  19.     mysql_query(&mysql, "delete from tmptab where c1 = 101");  
  20.     mysql_query(&mysql, "select * from tmptab");  
  21.     printf("--删除数据测试--\n");  
  22.     printResult(&mysql);  
  23.     mysql_query(&mysql, "update tmptab set c3 = 'address4' where c1 = 103");  
  24.     mysql_query(&mysql, "select * from tmptab");  
  25.     printf("--更新数据测试--\n");  
  26.     printResult(&mysql);  
  27.     mysql_query(&mysql, "delete from tmptab");  
  28.     mysql_query(&mysql, "select * from tmptab");  
  29.     printf("--清空数据测试--\n");  
  30.     printResult(&mysql);  
  31.     mysql_query(&mysql, "drop table tmptab");      
  32.     mysql_query(&mysql, "drop database tmpdb");  
  33.     mysql_close(&mysql);  
  34. }  
  35. void printResult(MYSQL *mysqlPrint)//打印结果集(此处传入指针,而非内容)  
  36. {  
  37.     MYSQL_RES * result;  
  38.     int numFields = 0;  
  39.     int numRows = 0;  
  40.     MYSQL_FIELD * field;  
  41.     MYSQL_ROW row;  
  42.     int i = 0;  
  43.     result = mysql_store_result(mysqlPrint);//将查询的全部结果读取到客户端  
  44.     numFields = mysql_num_fields(result);//统计结果集中的字段数  
  45.     numRows = mysql_num_rows(result);//统计结果集的行数  
  46.     while(field = mysql_fetch_field(result))//返回结果集中的列信息(字段)  
  47.         printf("%s\t", field->name);  
  48.     printf("\n");  
  49.     if(result)  
  50.     {  
  51.         while(row = mysql_fetch_row(result))//返回结果集中行的记录  
  52.         {  
  53.             for(i = 0; i < numFields; i++)  
  54.             {  
  55.                 printf("%s\t", row[i]);  
  56.             }  
  57.             printf("\n");  
  58.         }  
  59.     }  
  60.     mysql_free_result(result);//释放result空间,避免内存泄漏  
  61. }  

4 编译与运行
    4.1 获取编译依赖信息

[plain]  view plain  copy
  1. [root@localhost /]# mysql_config --cflags  
  2. -I/usr/local/mysql/include  -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1  
  3. [root@localhost /]# mysql_config --libs  
  4. -L/usr/local/mysql/lib -lmysqlclient -lpthread -lm -lrt -ldl  
    mysql_config --cflags  编译器标志,用于查找包含文件,以及编译libmysqlclient库时所要使用的关键编译器标志和定义。
    mysql_config --libs  与MySQL客户端库进行链接所需的库和选项。
    4.2 编译源文件
[plain]  view plain  copy
  1. [root@localhost /]# gcc -o MysqlCTest MysqlCTest.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient  
    4.3 执行编译好的文件
[plain]  view plain  copy
  1. [root@localhost /]# ./MysqlCTest     
  2. --增加数据测试--  
  3. c1      c2      c3  
  4. 101     姓名1   address1  
  5. 102     姓名2   address2  
  6. 103     姓名3   address3  
  7. --删除数据测试--  
  8. c1      c2      c3  
  9. 102     姓名2   address2  
  10. 103     姓名3   address3  
  11. --更新数据测试--  
  12. c1      c2      c3  
  13. 102     姓名2   address2  
  14. 103     姓名3   address4  
  15. --清空数据测试--  
  16. c1      c2      c3  

5 补充知识
    5.1 避免中文乱码

    为确保程序写入数据库以及从数据库读出时不出现乱码,需要做如下配置:
    c客户端程序级别:
    c程序文件设置编码 utf8,如

[plain]  view plain  copy
  1. mysql_query(&mysql, "set names 'utf8'");  
    mysql数据库级别:
    设置MySQL数据库客户端及服务端配置为utf8 
    例如:
    在my.cnf配置文件中配置
[plain]  view plain  copy
  1. [mysql]    
  2. default_character_set=utf8    
  3. [mysqld]    
  4. character-set-server=utf8    
  5. collation-server=utf8_bin   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值