mysql api编程(五) 预处理的实现

来源:互联网 发布:自学c语言要多久 编辑:程序博客网 时间:2024/06/01 08:56

最近有小伙伴问我有没有mysql api编程的参考文档或手册,我前几天已经上传,下载地址

(1)本此所实现的sub表是在api 编程(四)的表的基础上面实现;未执行代码前该表的详细内容如下:

这里写图片描述

(2)代码:

/************************************************************************* * File Name: pretreatment.c * Author:    The answer * Function:  Other         * Mail:      2412799512@qq.com  * Created Time: 2017年07月01日 星期六 10时33分19秒 ************************************************************************/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<mysql.h>#include<errno.h>#define LEN 1024void sys_err(const char *ptr,int num){    perror(ptr);    exit(num);}int main(int argc,char **argv){    MYSQL *mysql = mysql_init(NULL);    int i;    mysql = mysql_real_connect(mysql,"127.0.0.1","root","lxg","date",3306,NULL,0);    if(!mysql)    {        sys_err("mysql_real_connect",-1);    }    /* 初始化字符集 */    if(mysql_query(mysql,"set names utf8"))    {        sys_err("mysql_query",-1);    }    /* 初始化一个预处理句柄 */    MYSQL_STMT *stmt = mysql_stmt_init(mysql);    char *sql = "insert into sub values(?,?,?,?,?,?)";    mysql_stmt_prepare(stmt,sql,strlen(sql));    MYSQL_BIND bind[6];    int id = 10;    int age = 29;    char name[LEN];    unsigned long namelen;    char sex = 'm';    char subject[LEN];    unsigned long subjectlen;    float salary = 6666.50;    for(i=0;i<3;++i)    {        char *_name[] = {"小华","小刚","小明"};        char *_subject[] = {"数据结构","计算机网络","高数"};        id += i;        age += i;        sex = 'g';        memset(name,'\0',sizeof(name));        strncpy(name,_name[i],strlen(_name[i]) +1 );        memset(subject,'\0',sizeof(subject));        strncpy(subject,_subject[i],strlen(_subject[i]) + 1);        salary += i+100;        namelen = (unsigned long)strlen(name);        subjectlen = (unsigned long)strlen(subject);        bind[0].buffer_type = MYSQL_TYPE_LONG;        bind[0].buffer = (void *)&id;        bind[0].buffer_length = sizeof(id);        bind[0].is_null = (my_bool *)0;        bind[1].buffer_type = MYSQL_TYPE_LONG;        bind[1].buffer = (void *)&age;        bind[1].buffer_length = sizeof(age);        bind[1].is_null = (my_bool *)0;        bind[2].buffer_type = MYSQL_TYPE_STRING;        bind[2].buffer = (void *)name;        bind[2].buffer_length = namelen;        bind[2].is_null = (my_bool*)0;        /* 若为字符串类型,多一个length */        bind[2].length = &namelen;        bind[3].buffer_type = MYSQL_TYPE_TINY;        bind[3].buffer = (void *)&sex;        bind[3].buffer_length = sizeof(sex);        bind[3].is_null = (my_bool *)0;        bind[4].buffer_type = MYSQL_TYPE_STRING;        bind[4].buffer = (void *)subject;        bind[4].buffer_length = subjectlen;        bind[4].is_null = (my_bool*)0;        bind[4].length = &subjectlen;        bind[5].buffer_type = MYSQL_TYPE_FLOAT;        bind[5].buffer = (void *)&salary;        bind[5].buffer_length = sizeof(salary);        bind[5].is_null = (my_bool*)0;        mysql_stmt_bind_param(stmt,bind);        if(mysql_stmt_execute(stmt))        {            sys_err("mysql_stmt_execute",-1);        }    }    mysql_close(mysql);    return 0;}

(3) 编译并且执行代码,此时的sub表多了3条纪录,如下图:

这里写图片描述

(4)有一个bug,就是本来性别age表列应该显示的英文字母,但是现在是数字,待修复;

原创粉丝点击