C开发Mysql客户端

1、C与Mysql

因为Mysql是用C语言开发的,所以会有一系列的API可以调用;

2、C调用Mysql的基础模型

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<mysql/mysql.h>

int main(void){
    int ret = 0;
    MYSQL mysql;
    MYSQL *connect = NULL;

    connect = mysql_init(&mysql);  //初始化
    if(connect == NULL){
        ret = -1; 
        printf("func mysql_init() err\n");
        return ret;
    }   
    connect = mysql_real_connect(connect, "localhost", "root", "123456", "mydb1", 0, NULL, 0); 
    if(connect == NULL){    //连接mysql
        ret = -1; 
        printf("func mysql_real_connect() err\n");
        return ret;
    }   
    printf("func mysql_real_connect() ok\n");

    mysql_close(&mysql);
    printf("hello world\n");
     
    return ret;

运行命令:

gcc dm01_hello.c -o dm01_hello -I/usr/include -L/usr/lib64/mysql -lmysqlclient -lm -lrt -ldl -lstdc++ -lpthread

运行结果:

3、C查询Mysql

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<mysql/mysql.h>

/*
 *中文问题
 *mysql_query   查询     
 *mysql_store_result 获取句柄
 *
 *locate mysql.h 可以查找这个.h文件所在的目录
 *
 *
 */
int main(void){
    int ret = 0;
    MYSQL mysql;
    MYSQL *connect = NULL;

    connect = mysql_init(&mysql);
    if(connect == NULL){
        ret = mysql_errno(&mysql);

        printf("func mysql_init() err\n");
        return ret;
    }

    connect = mysql_real_connect(connect, "localhost", "root", "123456", "mydb1", 0, NULL, 0);
    //中文问题的解决
    mysql_set_character_set(&mysql, "utf8");
    if(connect == NULL){
        ret = mysql_errno(&mysql);
        printf("func mysql_real_connect() err\n");
        return ret;
    }
    //查询
    const char *query = "select * from student";
    ret = mysql_query(&mysql, query);
    if(ret != NULL){
        ret = mysql_errno(&mysql);

        printf("func mysql_query() err\n");
        return ret;
    }
    //获取结果集和
    //结果集和中可能含有多行数据,获取结果集
    //mysql_store_result设计理念:告诉句柄,我一下子全部把数据从服务器端取到客户端,然后缓存起来
    MYSQL_RES *result = mysql_store_result(&mysql);
    //使用的过程中从服务器端获取结果
    //MYSQL_RES *result = mysql_use_result(&mysql); 
    
    //可得该数据库中这张表每行有多少元素
    unsigned int num = mysql_field_count(&mysql);
    int i;
    MYSQL_ROW row = NULL;  //在mysql.h中可以看到
    //打印表头
    MYSQL_FIELD *fields = mysql_fetch_fields(result);
    for(i = 0; i < num; i++){
        printf("%s\t", fields[i].name);
    }
    printf("\n");
    //打印表中内容
    while(row = mysql_fetch_row(result)){
        for(i = 0; i < num; i++){
            printf("%s\t", row[i]);
        }
        printf("\n");
    }

/*  
 *  这里是我们自己看到该表一行有多少元素
    while(row = mysql_fetch_row(result)){
        printf("%s, %s, %s, %s, %s, %s\n", row[0], row[1], row[2], row[3], row[4], row[5]);
    }
*/
    mysql_free_result(result);  
    
    mysql_close(&mysql);
    printf("hello world\n");

    return ret;   
}

运行结果:

4、C开发Mysql客户端

只实现了查询的功能:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<mysql/mysql.h>

int main(int argc, char **argv){
    int ret = 0;
    MYSQL mysql;
    MYSQL *connect = NULL;
    char sqlbuf[80];

    connect = mysql_init(&mysql);
    if(connect == NULL){
        ret = mysql_errno(&mysql);

        printf("func mysql_init() err\n");
        return ret;
    }

    connect = mysql_real_connect(connect, "localhost", "root", "123456", argv[1], 0, NULL, 0);
    //中文问题的解决
    mysql_set_character_set(&mysql, "utf8");
    if(connect == NULL){
        ret = mysql_errno(&mysql);
        printf("func mysql_real_connect() err\n");
        return ret;
    }

    for(;;){
        memset(sqlbuf, 0, sizeof(sqlbuf));
        printf("mysql> :");
        //scanf()语句对tab 空格 回车 都省去了,对sql语句将会发生截断,用gets()可保持sql语句的原样性
        gets(sqlbuf);

        //退出
        if(strncmp("exit", sqlbuf, 4) == 0 || strncmp("quit", sqlbuf, 4) == 0){
            break;
        }
        //查询是否为SQL语句
        //ret = mysql_query(&mysql, "set name utf8");
        ret = mysql_query(&mysql, sqlbuf);
        if(ret != NULL){
            ret = mysql_errno(&mysql);

            printf("func mysql_query() err\n");
            return ret;
        }

        if(strncmp("select", sqlbuf, 6) == 0 || strncmp("SELECT", sqlbuf, 6) == 0){

            MYSQL_RES *result = mysql_store_result(&mysql);
            
            unsigned int num = mysql_field_count(&mysql);  //表头有多少列
            int i;     
            MYSQL_ROW row = NULL;  //在mysql.h中可以看到
            //打印表头
            MYSQL_FIELD *fields = mysql_fetch_fields(result);
            for(i = 0; i < num; i++){  //打印表头
                printf("%s\t", fields[i].name);
            }
            printf("\n");

            //打印表中内容
            while(row = mysql_fetch_row(result)){
                for(i = 0; i < num; i++){
                    printf("%s\t", row[i]);
                }
                printf("\n");
            }
            mysql_free_result(result);
        }
    }

    mysql_close(&mysql);
    printf("hello world\n");

    return ret;
}

看看mysql.h文件:

可以知道:MYSQL_ROW的真实类型:char **

运行结果:

看看Mysql:

由于客户端的C语言开发数据库,我只实现了查询功能,其他的功能没有实现,导致没有打印出来,但是现在已经可以通过这个客户端对数据库进行操作了;

时间: 2024-12-23 04:59:04

C开发Mysql客户端的相关文章

mysql客户端navicat连接数据库

实验环境说明: 本地物理机windows7系统,安装vmware workstaion 11,新建centos6.6系统虚拟机并安装LAMP环境: 本地物理IP:192.168.71.123   虚拟机IP地址为:192.168.71.126 实验目的: 在本地windows访问,虚拟机中的mysql数据库:(测试OK后可以给开发部门使用) 具体步骤如下: 1.虚拟机设置:虚拟网络编辑器选择桥接模式,桥接到本地网卡上: 虚拟机网络连接:桥接模式,复制物理机网络状态勾选: 2.登录虚拟机,修改虚拟

MYSQL 客户端与服务器关系

数据库概念   如果想要知道mysql数据库客户端与服务器之间的关系.首先要明白什么是"数据库". 从字面意思理解,所谓"数据库",就是存放数据的库.现实中,大家都知道仓库,粮食库,车库,快递库,它们是放各种实体东西的库.而数据库,放的只有数据. 它是一个软件,它是一个能帮我们管理数据的地方.什么样的东西算数据?一篇文章,一个人的年龄,名字,一件商品的名称,数量,价格等等...把它们放在数据库中稳妥的管理起来,且效率挺高,这就是数据库. 数据库与PHP配合的重要性

腾讯QQ的开发分客户端软件和服务器端软件

Windows客户端主要是C++ COM/ATL Q+Web 后端C++ CGI ,前端javascript和flash 望采纳 腾讯QQ使用何种开发平台? 腾讯QQ的开发分客户端软件和服务器端软件两部分. 客户端采用 Microsoft Visual C++开发: 服务器端软件采用Linux gcc开发 : 数据库采用MySql 数据库. 腾讯QQ采用标准的TCP/IP协议为通信协议. TCP/IP协议中又分为TCP协议和UDP协议,TCP协议是面向连接的协议,它比较安全.稳定,但是效率不高,

4个mysql客户端工具的比较

mysql是我以前学习和练习所使用的数据,现在在工作中也在使用,之前公司里用oracle,我在做自己的东西的时候觉得用oracle太不方便,于是就找了mysql(当时也考虑过sqlserver,觉得还是没有mysql小巧),从那时起我就开始接触下面所说的几种mysql客户端工具了. 我接触的mysql客户端工具一共有4个,mysqlfront, sqlyog, mysqlbrowser, ems mysql manager,其中mysqlbrowser是我最早使用的一个mysql客户端工具(一年

MMORGP大型游戏设计与开发(客户端架构 part13 of vegine)

一些数据是需要不断改动的,程序不可能因为这些改动而不厌其烦的去改动代码,早期的这种做法就成了程序员们最悲哀的痛苦.自从有了数据管理后,程序的世界逐渐清晰,这些烦恼也不再出现,不过若是要很好的管理数据可是一门需要不断摸索的学问.天龙八部/武侠世界中管理配置数据小到ini,大到mysql数据库,各种各样的数据都需要采用专有的模块与方法去实现.而在配置中,策划会比较喜欢由excel来配置一些游戏中的参数,所以才有了我们今天所说的文件数据模块,即一张txt.其实这种用法现在有不少游戏也正在使用,举个例子

MMORGP大型游戏设计与开发(客户端架构 part1 of vegine)

重写有些核心接口的时候,其实遇到了许多的问题,甚至一度的想过要放弃,但是最终还是坚持了下来.在客户端提供的这些接口中,可以清晰的看到客户端所依赖的各种模块的支持,以及各自之间的一些关联.下面只是介绍了vengine(微引擎)接口的基础模块框架,所谓的接口即对象设计中常见的Interface,为一个框架提供了清晰的规范支持. VEGINE FRAMEWORK 功能实现 该接口已全部实现,具体的实例只需要继承接口封装即可.上图只为简单的模块介绍,其实每个接口都有每个接口其特别的用处,这一点会在接下的

python开发mysql:mysql安装(windows)&amp;密码找回&amp;存储引擎简介&amp;库表的增删改查

一,mysql安装 1 下载地址 https://dev.mysql.com/downloads/file/?id=471342 2 解压后,将目录C:\mysql-5.7.19-winx64\bin添加到计算机环境变量中 3 4 用CMD命令行执行,mysqld --initialize-insecure 初始化数据库,这样C:\mysql-5.7.19-winx64 5 这个目录下就会产生data的目录,里面包含的就是初始化的东西,配置文件,用户密码信息 6 -insecure 这个参数就是

mysql客户端乱码

今天安装mysql,安装完成之后,通过客户端进行查询数据查询,发现中文是乱码.真是无奈啊,, 坐下来慢慢研究下,过程大概如下: 首先使用mysql工具查询数据库,看看对应的表是不是utf8,会不会乱码. 远程使用客户端发现不会乱码 在查看表的字段是什么编码 表的字符编码也没问题,那问题在那呢? 查看了本地mysql客户端的编码: 查看了mysql的客户端的编码,发现了道道 修改mysql配置文件的client处编码: 在my.cnf中的client处加了编码,重启mysql服务,再次检测 唉咬,

[linux]codeblocks开发mysql配置

1.在安装好mysql后,可以应该安装必要的库文件 $sudo apt-get install libmysqlclient-dev 2.将codeblocks与mysql的库文件连接起来 在codeblocks中的setting->complier->complier settint->otheroption中添加如下内容: `mysql_config --cflags`(注意两边是波浪线)-std=c11(c99标准) 在link setting->other link opt