• Linux下使用Mysql


    一.连接MySQL数据库

    一个最简单的程序示例:

    #include <stdio.h>
    #include "mysql.h"
    
    int main()
    {
        MYSQL mysql;
        int t, r;
        mysql_init(&mysql);
    
        if (!mysql_real_connect(&mysql, "localhost", "root", "supersmd", "student", 0, NULL, 0))
            printf("Error connecting to database: %s
    ", mysql_error(&mysql));
        else
            printf("Connected MySQL successfully!
    ");
    
        mysql_close(&mysql);
    
        return 0;
    }
    


    它的编译命令为:gcc -o connect connect.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient

    如果报出链接错误,没有找到mysqlclient 库,检查一下是否安装了,没有的话可以:

    sudo apt-get install libMySQLclient15-dev


    步骤:

    1.初始化MySQL的连接句柄

       在连接MySQL数据库之前,首先调用mysql_init()函数以初始化一个连接句柄。若建立成功,则返回一个新创建的链接句柄的指针;否则返回NULL

       mysql_init()函数的原型如下:

       MYSQL *mysql_init(MYSQL *);

    2.实际连接数据库

       在调用mysql_init()函数初始化MySQL句柄以后,调用mysql_real_connect()函数实际进行与MySQL服务器的链接。

       mysql_real_connect()函数原型如下:

       MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, cosnt char *db, unsigned int port, const char *NAME_socket, unsigned long client_flag);

    其中的参数含义:

        mysql 是MYSQL连接句柄的指针。

        host 既可以是主机名也可以是IP地址。如果连接的是本地机器,则其值为“localhost”

        user 指定登录MySQL服务器的用户名

        passwd 指定用户user的密码

        db 是数据库名称

        port 应该为0,不为0则将其值作为TCP/IP连接的端口号

        NAME_socket 默认为NULL,如不为NULL,则该字符串描述了应使用的套接字或命名管道

        client_flag 通常为0  


    二. 数据查询

    #include <stdio.h>
    #include <string.h>
    #include "mysql.h"
    
    int main()
    {
        MYSQL mysql;
        MYSQL_RES *res;     //该结构代表返回行的查询结果(SELECT,SHOW,DESCRIBE,EXPLAIN)
        MYSQL_ROW row;      //这是一行数据的“类型安全”表示,它指向含有一行数据的字符串数组。行号可以通过mysql_fetch_row()函数获得
        char *query;
        int flag, t;
    
        mysql_init(&mysql);
        if (!mysql_real_connect(&mysql, "localhost", "root", "supersmd", "student", 0, NULL, 0))    //若连接数据库失败
        {   
            printf("Failed to connect to MySQL!
    ");
            return 0;
        }   
        else
            printf("Connected MySQL successfully!
    ");
    
        query = "select * from student";    //要查询的SQL语句
        flag = mysql_real_query(&mysql, query, (unsigned int)strlen(query));
        if (flag)   //非0查询失败
        {   
            printf("query failed!
    ");
            return 0;
        }   
        else
            printf("[%s] made...
    ", query);
    
        res = mysql_store_result(&mysql);   //保存查询结果
        while (row = mysql_fetch_row(res))
        {   
            for (t = 0; t < mysql_num_fields(res); t++)
                printf("%s ", row[t]);
            printf("
    ");
        }   
        
        mysql_close(&mysql);
        return 0;
    }
    

    函数说明:

       (1) int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length);

    执行指定为带计数的字符串query的SQL查询。查询成功返回0;

       (2) mysql_real_query()的辅助函数及其用法

                 

    函数原型 用法
    mysql_store_result() 将查询的全部结果读取到客户端。查询成功后必须调用mysql_store_result()
    mysql_num_field() 返回结果集中的行数
    mysql_fetch_row() 检索结果集的下一行

    三.添加数据

    #include <stdio.h>
    #include <string.h>
    #include "mysql.h"
    
    int main()
    {
        MYSQL mysql;
        MYSQL_RES *res;
        MYSQL_ROW row;
        char *query[2];
        int i, flag, r;
    
        mysql_init(&mysql);
        if (!mysql_real_connect(&mysql, "localhost", "root", "supersmd", "student", 0, NULL, 0)) 
        {   
            printf("Failed to connect to MySQL!
    ");
            return 0;
        }   
        else
            printf("Connected MySQL successfully!
    ");
        query[0] = "insert into student (sno, sname)values(1010,'kobe')";
        query[1] = "insert into student (sno, sname)values(1020,'TMC')";
    
        for (i = 0; i < 2; i++)
        {   
            if (mysql_real_query(&mysql, query[i], (unsigned int)strlen(query[i])))
            {   
                printf("insert data %d failed!
    ", i+1);
                return 0;
            }   
        }   
        mysql_close(&mysql);
        return 0;
    }
    

    四.删除数据

    #include <stdio.h>
    #include <string.h>
    #include "mysql.h"
    
    int main()
    {
        MYSQL mysql;
        MYSQL_RES *res;
        MYSQL_ROW row;
        char *query;
        int i, flag, r;
    
        mysql_init(&mysql);
        if (!mysql_real_connect(&mysql, "localhost", "root", "supersmd", "student", 0, NULL, 0)) 
        {   
            printf("Failed to connect to MySQL!
    ");
            return 0;
        }   
        else
            printf("Connected MySQL successfully!
    ");
        query = "delete from student where sno = '1001'";
    
        if (!mysql_real_query(&mysql, query, (unsigned int)strlen(query)))
        {   
            printf("delete data successfully!
    ");
        }   
        mysql_close(&mysql);
        return 0;
    }


  • 相关阅读:
    [kuangbin带你飞]专题二十一 概率&期望
    [kuangbin带你飞]专题二十 斜率DP
    POJ——3984迷宫问题(BFS+回溯)
    POJ——2251Dungeon Master(三维BFS)
    HDU——2647Reward(DFS或差分约束)
    HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
    PAT天梯赛练习题——L3-008. 喊山(邻接表+BFS)
    Opencv学习笔记——视频高斯模糊并分别输出
    Opencv学习笔记——视频进度条的随动
    NYOJ——239月老的难题(二分图最大匹配)
  • 原文地址:https://www.cnblogs.com/pangblog/p/3292008.html
Copyright © 2020-2023  润新知