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函数,这样写就不需要\n也能相输出屏幕输出
    char name[1024];
    memset(name, 0, sizeof(name));
    read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字
    name[strlen(name) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串'0'
    
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "DELETE FROM table1 WHERE name = '%s'", name);
    printf("%s\n", SQL);    
}

//插入数据函数
void insertname(char *SQL)
{
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入要插入的名字>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char name[1024];
    memset(name, 0, sizeof(name));
    read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字
    name[strlen(name) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串'0'
    
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入要插入的性别>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char sex[1024];
    memset(sex, 0, sizeof(sex));
    read(STDIN_FILENO, sex, sizeof(sex)); //等待用户输入要删除的名字
    sex[strlen(sex) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串'0'
    
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入要插入的年龄>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char age[1024];
    memset(age, 0, sizeof(age));
    read(STDIN_FILENO, age, sizeof(age)); //等待用户输入要删除的名字
    age[strlen(age) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串'0'
    
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入要插入的班级>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char classes[1024];
    memset(classes, 0, sizeof(classes));
    read(STDIN_FILENO, classes, sizeof(classes)); //等待用户输入要删除的名字
    classes[strlen(classes) - 1] = 0; //将字符串最后一位\n替换为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\n", SQL);    
}

//更新数据函数
void updatename(char *SQL)
{
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入要修改的名字>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char name[1024];
    memset(name, 0, sizeof(name));
    read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字
    name[strlen(name) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串'0'
    
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入修改后的性别>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char sex[1024];
    memset(sex, 0, sizeof(sex));
    read(STDIN_FILENO, sex, sizeof(sex)); //等待用户输入要删除的名字
    sex[strlen(sex) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串'0'
    
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入修改后的年龄>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char age[1024];
    memset(age, 0, sizeof(age));
    read(STDIN_FILENO, age, sizeof(age)); //等待用户输入要删除的名字
    age[strlen(age) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串'0'
    
    memset(SQL, 0, BUFSIZE);
    sprintf(SQL, "%s", "请输入修改后的班级>:");
    write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
    char classes[1024];
    memset(classes, 0, sizeof(classes));
    read(STDIN_FILENO, classes, sizeof(classes)); //等待用户输入要删除的名字
    classes[strlen(classes) - 1] = 0; //将字符串最后一位\n替换为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\n", SQL);    
}

//查询
void selectname(const char *SQL)
{
    if(mysql_query(conn, SQL) != 0)
    {
        printf("query error, %s\n", 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\t", field->name);
        iFieldCount++;
    }
    printf("\n");
    //循环遍历每一行
    MYSQL_ROW row;
    while(1)
    {
        row = mysql_fetch_row(result);
        if(row == NULL)
            break;
        int i = 0;
        for(; i < iFieldCount; i++)
            printf("%s\t", (const char *)row[i]);
        printf("\n");
    }
    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\n", mysql_error(&mysql));
        return -1;
    }
    
    if(mysql_query(conn, "SET NAMES utf8") != 0)
    {
        printf("设置字符集错误,%s\n", mysql_error(&mysql));
    }
    
    char buf[BUFSIZE];
    memset(buf, 0, sizeof(buf));
    strcpy(buf, "请选择\n1:插入\n2:删除\n3:修改\n4:查询\n");
    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\n", mysql_error(&mysql));
        }
        
    }
    mysql_close(conn);
    puts("Hello World\n");
    return EXIT_SUCCESS;
}

 

posted @ 2015-04-18 09:12  禅意  阅读(331)  评论(0编辑  收藏  举报