MYSQL C语言

C语言操作Mysql基本操作

函数归纳:

连接:mysql_real_connect()

头文件

#include <mysql.h>

函数原型

MYSQL *mysql_real_connect

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

MYSQL为mysql_init函数返回的指针,

host为null或 localhost时链接的是本地的计算机,

当db为空的时候,函数链接到默认数据库,在进行 mysql安装时会存在默认的test数据库,因此此处可以使用test数据库名称,

port端口为0,

使用 unix连接方式,unix_socket为null时,表明不使用socket或管道机制,最后一个参数经常设置为0
mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。

返回值:

如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。

使用实例:
/* 连接mysql */  
void mysqldb_connect(MYSQL *mysql)
{  
    if(!mysql_real_connect(mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, DB_NAME, 0, NULL, 0)) {  
        printf("\nFailed to connect:%s\n", mysql_error(mysql));  
    } else {
       printf("\nConnect sucessfully!\n"); 
    }
} 

插值:

函数原型:

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

函数说明:

执行query指向的SQL查询,他应该是一个length字节的字符串。

查询必须由一个单个的SQL语句组成。你不应该在语句后增加一个终止的分号(“;”)或\g。
对于包含二进制数据的查询,你必须使用mysql_real_query()而不是mysql_query(),因为二进制代码数据可能包含“\0”字符,而且,mysql_real_query() 比mysql_query()更快,因为它对查询字符串调用strlen()。

返回值:

如果查询成功,返回0;

如果发生一个错误。返回非零。

错误:

CR_COMMANDS_OUT_OF_SYNC:命令以一个不适当的次序被执行。
CR_SERVER_GONE_ERROR:MySQL服务器关闭了。
CR_SERVER_LOST:对服务器的连接在查询期间失去。
CR_UNKNOWN_ERROR:发生一个未知的错误。

输出函数sprintf

sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。

sprintf的第一个参数是目的字符串,如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭…"的提示。

函数原型:int sprintf( char *buffer, const char *format [, argument] … ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。

char s[40]; sprintf(s,"%s%d%c","test",1,'2');
mysql插值
INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
使用实例:
/* 插入数据 */
void mysqldb_insert(MYSQL *mysql, int number, int grade, char *sex, int score)
{  
    int t;  
    char *head = "INSERT INTO ";  
    char query[120];
    char field[48] = "number, grade, sex, score";
    char *left = "(";  
    char *right = ") ";  
    char *values = "VALUES";  
    char message[100] = {0};  

    sprintf(message, "%d, %d, \"%s\", %d", number, grade, sex, score);

    /* 拼接sql命令 */  
    sprintf(query, "%s%s%s%s%s%s%s%s%s", head, TABLE_NAME, left, field, right, values, left, message, right);
      //insert into students (number,grade,sex,score) values (message)
    printf("%s\n", query);  

    t = mysql_real_query(mysql, query, strlen(query));
    if (t) {  
    	printf("Failed to query: %s\n", mysql_error(mysql));  
    } 
    else {
        printf("\nInsert sucessfully!\n");
    }
    
} 

删除数据:

mysql删除:

删除表中的全部数据:删除 tb_courses_new 表中的全部数据

DELETE FROM tb_courses_new;

根据条件删除:在 tb_courses_new 表中,删除 course_id 为 4 的记录

 DELETE FROM tb_courses
    -> WHERE course_id=4;
使用实例:
/* 删除数据 */
void mysqldb_delete(MYSQL *mysql, char *field_name, int number)
{  
    int t;
    char *head = "DELETE FROM ";  
    char query[120];  

    sprintf(query, "%s%s where %s =%d", head, TABLE_NAME, field_name, number);
    printf("%s\n", query);
//delete from students ** **

    t = mysql_real_query(mysql, query, strlen(query));
    if (t) {  
        printf("\nFailed to query: %s\n", mysql_error(mysql));  
    } else {
        printf("\nDelete data sucessfully!\n");  
    }
    
}

更新数据:

mysql更新语句:
UPDATE [LOW_PRIORITY] [IGNORE] table_name 
SET 
    column_name1 = expr1,
    column_name2 = expr2,
    ...
WHERE
    condition;

实例:

更新了员工编号1056的姓氏和电子邮件列:
UPDATE employees 
SET 
    lastname = 'Hill',
    email = 'mary.hill@yiibai.com'
WHERE
    employeeNumber = 1056;
使用实例:
/* 更新数据 */
void mysqldb_update(MYSQL *mysql, char *field_name, int score)
{  
    int t;
    char *head = "UPDATE ";
    char query[100];

    sprintf(query, "%s%s SET %s=%d", head, TABLE_NAME, field_name, score);
    printf("%s\n", query);

    t = mysql_real_query(mysql, query, strlen(query));
    if (t) {  
        printf("Failed to update: %s\n", mysql_error(mysql));  
        return;
    }
    printf("\nUpdate data sucessfully!\n");
}

查询数据:

mysql查询语句
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。

SELECT 命令可以读取一条或者多条记录。

你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

你可以使用 WHERE 语句来包含任何条件。

你可以使用 LIMIT 属性来设定返回的记录数。

你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

实例:

SELECT grade FROM test.students;
SELECT * FROM test.students;
使用实例
/* 查询数据 */
void mysqldb_query(MYSQL *mysql)  
{  
    int t;
    char *head = "SELECT * FROM ";
    char query[50] = {0};
    MYSQL_RES *res;
    MYSQL_ROW row; 

    sprintf(query, "%s%s", head, TABLE_NAME);

    t = mysql_real_query(mysql, query, strlen(query));  

    if (t) {
        printf("Failed to query: %s\n", mysql_error(mysql));  
        return;
    } else {
        printf("\nQuery successfully!\n");  
    }

    res = mysql_store_result(mysql);
    while (row = mysql_fetch_row(res)) {  
        for(t = 0; t < mysql_num_fields(res); t++) {  
            printf("%s\t", row[t]);  
        }  
        printf("\n");
    }  
    mysql_free_result(res);
}

整体代码

/*
 * =====================================================================================
 *
 *       Filename:  mysql_in_c.c
 *       Description:  
 *       Version:   1.0
 *       Created:   2020年12月10日 23时18分46秒
 *       Revision:  none
 *       Compiler:  gcc
 *       
 *
 * =====================================================================================
 */

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <mysql/mysql.h>  

#define MYSQL_HOST    "localhost"
#define MYSQL_USER    "root"
#define MYSQL_PASSWD  "12345"
#define DB_NAME "test"
#define TABLE_NAME "students"

/*
 * 测试的数据表结构很简单, number, grade, sex, score 四个字段, 代表学号、年级、性别、分数
*/

/* 连接mysql */  
void mysqldb_connect(MYSQL *mysql)
{  
    if(!mysql_real_connect(mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, DB_NAME, 0, NULL, 0)) {  
        printf("\nFailed to connect:%s\n", mysql_error(mysql));  
    } else {
       printf("\nConnect sucessfully!\n"); 
    }
}   

/* 插入数据 */
void mysqldb_insert(MYSQL *mysql, int number, int grade, char *sex, int score)
{  
    int t;  
    char *head = "INSERT INTO ";  
    char query[120];
    char field[48] = "number, grade, sex, score";
    char *left = "(";  
    char *right = ") ";  
    char *values = "VALUES";  
    char message[100] = {0};  

    sprintf(message, "%d, %d, \"%s\", %d", number, grade, sex, score);

    /* 拼接sql命令 */  
    sprintf(query, "%s%s%s%s%s%s%s%s%s", head, TABLE_NAME, left, field, right, values, left, message, right);
      //insert into students (number,grade,sex,score) values (message)
    printf("%s\n", query);  

    t = mysql_real_query(mysql, query, strlen(query));
    if (t) {  
    	printf("Failed to query: %s\n", mysql_error(mysql));  
    } 
    else {
        printf("\nInsert sucessfully!\n");
    }
    
}  

/* 删除数据 */
void mysqldb_delete(MYSQL *mysql, char *field_name, int number)
{  
    int t;
    char *head = "DELETE FROM ";  
    char query[120];  

    sprintf(query, "%s%s where %s =%d", head, TABLE_NAME, field_name, number);
    printf("%s\n", query);
//delete from students ** **

    t = mysql_real_query(mysql, query, strlen(query));
    if (t) {  
        printf("\nFailed to query: %s\n", mysql_error(mysql));  
    } else {
        printf("\nDelete data sucessfully!\n");  
    }
    
}  

/* 更新数据 */
void mysqldb_update(MYSQL *mysql, char *field_name, int score)
{  
    int t;
    char *head = "UPDATE ";
    char query[100];

    sprintf(query, "%s%s SET %s=%d", head, TABLE_NAME, field_name, score);
    printf("%s\n", query);

    t = mysql_real_query(mysql, query, strlen(query));
    if (t) {  
        printf("Failed to update: %s\n", mysql_error(mysql));  
        return;
    }
    printf("\nUpdate data sucessfully!\n");
}

/* 查询数据 */
void mysqldb_query(MYSQL *mysql)  
{  
    int t;
    char *head = "SELECT * FROM ";
    char query[50] = {0};
    MYSQL_RES *res;
    MYSQL_ROW row; 

    sprintf(query, "%s%s", head, TABLE_NAME);

    t = mysql_real_query(mysql, query, strlen(query));  

    if (t) {
        printf("Failed to query: %s\n", mysql_error(mysql));  
        return;
    } else {
        printf("\nQuery successfully!\n");  
    }

    res = mysql_store_result(mysql);
    while (row = mysql_fetch_row(res)) {  
        for(t = 0; t < mysql_num_fields(res); t++) {  
            printf("%s\t", row[t]);  
        }  
        printf("\n");
    }  
    mysql_free_result(res);
} 

/* 断开mysql连接 */ 
void close_connection(MYSQL *mysql)
{
    mysql_close(mysql);
}

int main(int argc, char *argv[])
{  
    // 准备一组数据
    int number = 1;
    int grade = 1;
    char sex[] = "male";
    int score = 100;

    // 初始化mysql
    MYSQL *mysql = mysql_init(NULL);           
    if (!mysql) {
        printf("\nMysql init failed.\n");
    }

    // 连接MYSQL
    mysqldb_connect(mysql);

    // 插入数据
    mysqldb_insert(mysql, number, grade, sex, score);

    // 更新数据
    mysqldb_update(mysql, "score", 99);

    // 查询数据
    mysqldb_query(mysql);

    // 删除数据
    mysqldb_delete(mysql, "number", number);

    // 断开连接
    close_connection(mysql);

    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值