c mysql linux

13 篇文章 5 订阅
2 篇文章 0 订阅

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 编程实例

  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. }  
#include <stdio.h>

include “/usr/local/mysql/include/mysql.h”

void printResult(MYSQL *mysql);
int main()
{
MYSQL mysql;
MYSQL_RES * result;
mysql_init(&mysql);
mysql_real_connect(&mysql, “127.0.0.1”, “root”, “jesse”, NULL, 3355, NULL, 0);
mysql_query(&mysql, “set names ‘utf8’”);
mysql_query(&mysql, “drop database if exists tmpdb”);
mysql_query(&mysql, “create database tmpdb”);
mysql_query(&mysql, “use tmpdb”);
mysql_query(&mysql, “create table tmptab(c1 int, c2 varchar(20), c3 varchar(20))”);
mysql_query(&mysql, “insert into tmptab values(101, ‘姓名1’, ‘address1’), (102, ‘姓名2’, ‘address2’), (103, ‘姓名3’, ‘address3’)”);
mysql_query(&mysql, “select * from tmptab”);
printf(“–增加数据测试–\n”);
printResult(&mysql);
mysql_query(&mysql, “delete from tmptab where c1 = 101”);
mysql_query(&mysql, “select * from tmptab”);
printf(“–删除数据测试–\n”);
printResult(&mysql);
mysql_query(&mysql, “update tmptab set c3 = ‘address4’ where c1 = 103”);
mysql_query(&mysql, “select * from tmptab”);
printf(“–更新数据测试–\n”);
printResult(&mysql);
mysql_query(&mysql, “delete from tmptab”);
mysql_query(&mysql, “select * from tmptab”);
printf(“–清空数据测试–\n”);
printResult(&mysql);
mysql_query(&mysql, “drop table tmptab”);
mysql_query(&mysql, “drop database tmpdb”);
mysql_close(&mysql);
}
void printResult(MYSQL *mysqlPrint)//打印结果集(此处传入指针,而非内容)
{
MYSQL_RES * result;
int numFields = 0;
int numRows = 0;
MYSQL_FIELD * field;
MYSQL_ROW row;
int i = 0;
result = mysql_store_result(mysqlPrint);//将查询的全部结果读取到客户端
numFields = mysql_num_fields(result);//统计结果集中的字段数
numRows = mysql_num_rows(result);//统计结果集的行数
while(field = mysql_fetch_field(result))//返回结果集中的列信息(字段)
printf(“%s\t”, field->name);
printf(“\n”);
if(result)
{
while(row = mysql_fetch_row(result))//返回结果集中行的记录
{
for(i = 0; i < numFields; i++)
{
printf(“%s\t”, row[i]);
}
printf(“\n”);
}
}
mysql_free_result(result);//释放result空间,避免内存泄漏
}
4 编译与运行
    4.1 获取编译依赖信息

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

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

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

  1. mysql_query(&mysql, “set names ‘utf8’”);  
mysql_query(&mysql, "set names 'utf8'");
    mysql数据库级别:
    设置MySQL数据库客户端及服务端配置为utf8 
    例如:
    在my.cnf配置文件中配置
  1. [mysql]    
  2. default_character_set=utf8    
  3. [mysqld]    
  4. character-set-server=utf8    
  5. collation-server=utf8_bin   
[mysql]  
default_character_set=utf8  
[mysqld]  
character-set-server=utf8  
collation-server=utf8_bin 

****************************************************************************************
   
****************************************************************************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值