zoukankan      html  css  js  c++  java
  • linux c下mysql编程样例

    /*
     ============================================================================
     Name        : mysql1.c
     Author      : suys
     Version     : 
     Copyright   : Your copyright notice
     Description : Link to mysql in C, Ansi-style
     ============================================================================
     */
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <errno.h>
    #include <termios.h>
    #include <mysql/mysql.h>
    
    #define BUFSIZE 1024
    
    MYSQL mysql, *conn;
    //删除函数
    void deletename(char *SQL)
    {
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入要干掉的名字>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char name[1024];
        memset(name, 0, sizeof(name));
        read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字
        name[strlen(name) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "DELETE FROM table1 WHERE name = '%s'", name);
        printf("%s
    ", SQL);    
    }
    
    //插入数据函数
    void insertname(char *SQL)
    {
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入要插入的名字>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char name[1024];
        memset(name, 0, sizeof(name));
        read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字
        name[strlen(name) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入要插入的性别>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char sex[1024];
        memset(sex, 0, sizeof(sex));
        read(STDIN_FILENO, sex, sizeof(sex)); //等待用户输入要删除的名字
        sex[strlen(sex) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入要插入的年龄>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char age[1024];
        memset(age, 0, sizeof(age));
        read(STDIN_FILENO, age, sizeof(age)); //等待用户输入要删除的名字
        age[strlen(age) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入要插入的班级>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char classes[1024];
        memset(classes, 0, sizeof(classes));
        read(STDIN_FILENO, classes, sizeof(classes)); //等待用户输入要删除的名字
        classes[strlen(classes) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "INSERT INTO table1 (name, sex, age, class) VALUES ('%s', '%s', %s, %s)", name, sex, age, classes);
        printf("%s
    ", SQL);    
    }
    
    //更新数据函数
    void updatename(char *SQL)
    {
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入要修改的名字>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char name[1024];
        memset(name, 0, sizeof(name));
        read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字
        name[strlen(name) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入修改后的性别>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char sex[1024];
        memset(sex, 0, sizeof(sex));
        read(STDIN_FILENO, sex, sizeof(sex)); //等待用户输入要删除的名字
        sex[strlen(sex) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入修改后的年龄>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char age[1024];
        memset(age, 0, sizeof(age));
        read(STDIN_FILENO, age, sizeof(age)); //等待用户输入要删除的名字
        age[strlen(age) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "%s", "请输入修改后的班级>:");
        write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要
    也能相输出屏幕输出
        char classes[1024];
        memset(classes, 0, sizeof(classes));
        read(STDIN_FILENO, classes, sizeof(classes)); //等待用户输入要删除的名字
        classes[strlen(classes) - 1] = 0; //将字符串最后一位
    替换为0,最后放的整数0而不是字符串'0'
        
        memset(SQL, 0, BUFSIZE);
        sprintf(SQL, "UPDATE table1 SET sex = '%s', age = '%s', class = '%s' WHERE name = '%s'", sex, age, classes, name);
        printf("%s
    ", SQL);    
    }
    
    //查询
    void selectname(const char *SQL)
    {
        if(mysql_query(conn, SQL) != 0)
        {
            printf("query error, %s
    ", mysql_error(&mysql));
        }
        //调用mysql_store_result得到查询结果,结果放到MYSQL_RES 结构中
        MYSQL_RES *result = mysql_store_result(conn);
        //要知道返回数据集有多少列才能自由的使用SELECT语句
        MYSQL_FIELD *field;
        int iFieldCount = 0;
        
        while(1)
        {
            field = mysql_fetch_field(result); //循环得到列名,如果循环到列的最后,函数返回NULL
            if(field == NULL)
                break;
            printf("%s	", field->name);
            iFieldCount++;
        }
        printf("
    ");
        //循环遍历每一行
        MYSQL_ROW row;
        while(1)
        {
            row = mysql_fetch_row(result);
            if(row == NULL)
                break;
            int i = 0;
            for(; i < iFieldCount; i++)
                printf("%s	", (const char *)row[i]);
            printf("
    ");
        }
        mysql_free_result(result);    
    }
    
    int main(int arg, char *args[])
    {
        if(arg < 4)
            return -1;
        mysql_init(&mysql); //相当于SQL内部初始化了一个TCP的socket,同时初始化了SQL必须的内存
        
        //连接到mysql server
        conn = mysql_real_connect(&mysql, args[1], args[2], args[3], args[4], 0, 0, 0);
        if(conn == NULL)
        {
            printf("connect error, %s
    ", mysql_error(&mysql));
            return -1;
        }
        
        if(mysql_query(conn, "SET NAMES utf8") != 0)
        {
            printf("设置字符集错误,%s
    ", mysql_error(&mysql));
        }
        
        char buf[BUFSIZE];
        memset(buf, 0, sizeof(buf));
        strcpy(buf, "请选择
    1:插入
    2:删除
    3:修改
    4:查询
    ");
        write(STDOUT_FILENO, buf, strlen(buf));
        memset(buf, 0, sizeof(buf));
        read(STDIN_FILENO, buf, sizeof(buf));
        if(strncmp(buf, "4", 1) == 0) //用户输入的4
        {
            memset(buf, 0, sizeof(buf));
            strcpy(buf, "请输入任意的SELECT语句");
            write(STDOUT_FILENO, buf, strlen(buf));
            memset(buf, 0, sizeof(buf));
            read(STDIN_FILENO, buf, sizeof(buf));
            selectname(buf);
        }
        else
        {
            if(strncmp(buf, "1", 1) == 0) //用户输入的1
            {
                insertname(buf);
            }
            if(strncmp(buf, "2", 1) == 0) //用户输入的2
            {
                deletename(buf);
            }
            if(strncmp(buf, "3", 1) == 0) //用户输入的3
            {
                updatename(buf);
            }
            
            if(mysql_query(conn, buf) != 0)
            {
                printf("设置字符集错误,%s
    ", mysql_error(&mysql));
            }
            
        }
        mysql_close(conn);
        puts("Hello World
    ");
        return EXIT_SUCCESS;
    }
  • 相关阅读:
    monkeyrunner1
    也来复习一下数据库的一些知识1
    Monkey原理
    总结一下app客户端的测试点
    从侧计--mongkeyScript问题
    从侧计----monkeyScript实例----开启墨迹天气并添加城市,最后关闭app
    求助:关于sql如何统计时间的问题
    虚拟机无法分配内存 virtual memory exhausted: Cannot allocate memory
    Ubuntu14.04安装libusb
    E: 软件包 ffmpeg 没有可供安装的候选者
  • 原文地址:https://www.cnblogs.com/yongssu/p/4436620.html
Copyright © 2011-2022 走看看