zoukankan      html  css  js  c++  java
  • 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;
    }


  • 相关阅读:
    LVM : 简介
    Linux 磁盘与磁盘分区
    Terraform:创建 Azure 虚机
    Terraform:简介
    Jenkins CLI 命令详解
    Bash 中常见的字符串操作
    读书笔记2014第16本:《视觉繁美:信息可视化方法与案例解析》
    读书笔记2014第15本:《视不可当----信息图与可视化传播》
    读书笔记2014第14本:《李鸿章传》
    中国象棋引擎的C#源代码
  • 原文地址:https://www.cnblogs.com/pangblog/p/3292008.html
Copyright © 2011-2022 走看看