鱼C论坛

 找回密码
 立即注册
查看: 419|回复: 1

Windows课程设计如何连接数据库?求大神解答。

[复制链接]
发表于 2021-5-20 17:52:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Windows课程设计如何连接数据库?求大神解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-20 18:49:30 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <mysql/mysql.h>

typedef struct {
    size_t test_id, t1, t2, t3;
} test_data_t;

void print_mysql_res(MYSQL_RES *mysql_res) {
    MYSQL_ROW row;
    unsigned int num_fields = mysql_num_fields(mysql_res);
    MYSQL_FIELD *field = mysql_fetch_fields(mysql_res);
    for(size_t i = 0; i < num_fields; ++i) {
        printf("%-10s", field[i].name);
    }
    printf("\n");
    while((row = mysql_fetch_row(mysql_res))) {
        for(size_t i = 0; i < num_fields; ++i) {
            printf("%-10s", row[i]);
        }
        printf("\n");
    }
}

void get_test_data(MYSQL *mysql, test_data_t *data) {
    MYSQL_ROW row;
    mysql_query(mysql, "select * from test_table");
    MYSQL_RES *mysql_res = mysql_store_result(mysql);
    unsigned int num_fields = mysql_num_fields(mysql_res);
    size_t *array[] = {&data->test_id, &data->t1, &data->t2, &data->t3};
    if((row = mysql_fetch_row(mysql_res))) {
        for(size_t i = 0; i < num_fields; ++i) {
            sscanf(row[i], "%lu", array[i]);
        }
    }
    mysql_free_result(mysql_res);
}

void set_test_data(MYSQL *mysql, const test_data_t *data) {
    char buff[1024];
    snprintf(buff, 1024, "update test_table set test_id = %lu, t1 = %lu, t2 = %lu, t3 = %lu where test_id = 0", \
        data->test_id, data->t1, data->t2, data->t3);
    mysql_query(mysql, buff);
}

void task1(void) {
    MYSQL mysql;
    mysql_init(&mysql);
    mysql_real_connect(&mysql, "localhost", "name1", "password1", "test_database", 0, NULL, 0);
    for(size_t i = 0; i < 1000; ++i) {
        test_data_t data;
        usleep(200);
        mysql_query(&mysql, "lock tables test_table write");
        get_test_data(&mysql, &data);
        ++data.t1;
        set_test_data(&mysql, &data);
        mysql_query(&mysql, "unlock tables");
    }
    mysql_close(&mysql);
    exit(0);
}

void task2(void) {
    MYSQL mysql;
    mysql_init(&mysql);
    mysql_real_connect(&mysql, "localhost", "name2", "password2", "test_database", 0, NULL, 0);
    for(size_t i = 0; i < 1000; ++i) {
        test_data_t data;
        mysql_query(&mysql, "lock tables test_table write");
        get_test_data(&mysql, &data);
        usleep(10);
        ++data.t2;
        set_test_data(&mysql, &data);
        mysql_query(&mysql, "unlock tables");
    }
    mysql_close(&mysql);
    exit(0);
}

void task3(void) {
    MYSQL mysql;
    mysql_init(&mysql);
    mysql_real_connect(&mysql, "localhost", "name3", "password3", "test_database", 0, NULL, 0);
    for(size_t i = 0; i < 1000; ++i) {
        test_data_t data;
        mysql_query(&mysql, "lock tables test_table write");
        get_test_data(&mysql, &data);
        ++data.t3;
        set_test_data(&mysql, &data);
        usleep(200);
        mysql_query(&mysql, "unlock tables");
    }
    mysql_close(&mysql);
    exit(0);
}

int main(void) {
    MYSQL mysql;
    mysql_init(&mysql);
    mysql_real_connect(&mysql, "localhost", "root", "Bdj0=3)MpqsF", NULL, 0, NULL, 0);
    mysql_query(&mysql, "create database if not exists test_database");
    mysql_query(&mysql, "drop table if exists test_database.test_table");
    mysql_query(&mysql, "create table if not exists test_database.test_table(test_id integer, \
        t1 integer, t2 integer, t3 integer)");
    mysql_query(&mysql, "insert into test_database.test_table(test_id, t1, t2, t3) select 0, 0, 0, 0 from dual \
        where not exists(select * from test_database.test_table)");
    mysql_query(&mysql, "create user if not exists 'name1'@'localhost' identified by 'password1'");
    mysql_query(&mysql, "create user if not exists 'name2'@'localhost' identified by 'password2'");
    mysql_query(&mysql, "create user if not exists 'name3'@'localhost' identified by 'password3'");
    mysql_query(&mysql, "grant all on *.* to 'name1'@'localhost'");
    mysql_query(&mysql, "grant all on *.* to 'name2'@'localhost'");
    mysql_query(&mysql, "grant all on *.* to 'name3'@'localhost'");

    void (*data[3])(void) = {task1, task2, task3};
    for(size_t i = 0; i < 3; ++i) {
        if(!fork()) data[i]();
    }
    int child_stat[3];
    for(size_t i = 0; i < 3; ++i)  wait(&child_stat[i]);

    mysql_query(&mysql, "select * from test_database.test_table");
    MYSQL_RES *mysql_res = mysql_store_result(&mysql);
    print_mysql_res(mysql_res);
    mysql_free_result(mysql_res);
    mysql_close(&mysql);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表