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 编程实例
#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 获取编译依赖信息

[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 编译源文件
[root@localhost /]# gcc -o MysqlCTest MysqlCTest.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient
    4.3 执行编译好的文件
[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,如

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

****************************************************************************************
    原文地址:http://blog.csdn.net/jesseyoung/article/details/40372047
    博客主页:http://blog.csdn.net/jesseyoung
****************************************************************************************

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
C语言中,我们可以使用MySQL提供的API来实现MySQL数据库增删查改操作。以下是一些基本的MySQL操作示例: 1. 连接MySQL数据库 ```c #include <mysql.h> MYSQL *conn; conn = mysql_init(NULL); /* 连接数据库 */ if (!mysql_real_connect(conn, "localhost", "root", "password", "database_name", 0, NULL, 0)) { printf("%s\n", mysql_error(conn)); exit(1); } ``` 2. 插入数据 ```c char *query; query = "INSERT INTO table_name (column1, column2, ...) VALUES ('value1', 'value2', ...)"; if (mysql_query(conn, query)) { printf("%s\n", mysql_error(conn)); exit(1); } ``` 3. 查询数据 ```c MYSQL_RES *result; MYSQL_ROW row; char *query; int num_fields; query = "SELECT * FROM table_name"; if (mysql_query(conn, query)) { printf("%s\n", mysql_error(conn)); exit(1); } result = mysql_store_result(conn); num_fields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { for(int i = 0; i < num_fields; i++) { printf("%s ", row[i] ? row[i] : "NULL"); } printf("\n"); } mysql_free_result(result); ``` 4. 更新数据 ```c char *query; query = "UPDATE table_name SET column1='value1', column2='value2', ... WHERE condition"; if (mysql_query(conn, query)) { printf("%s\n", mysql_error(conn)); exit(1); } ``` 5. 删除数据 ```c char *query; query = "DELETE FROM table_name WHERE condition"; if (mysql_query(conn, query)) { printf("%s\n", mysql_error(conn)); exit(1); } ``` 注意:以上代码示例仅供参考,实际使用时需要根据具体情况进行修改。同时,在使用MySQL API操作数据库时,需要注意SQL注入攻击等安全问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值