鱼C论坛

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

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

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

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

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

x
Windows课程设计如何连接数据库?求大神解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  6. typedef struct {
  7.     size_t test_id, t1, t2, t3;
  8. } test_data_t;

  9. void print_mysql_res(MYSQL_RES *mysql_res) {
  10.     MYSQL_ROW row;
  11.     unsigned int num_fields = mysql_num_fields(mysql_res);
  12.     MYSQL_FIELD *field = mysql_fetch_fields(mysql_res);
  13.     for(size_t i = 0; i < num_fields; ++i) {
  14.         printf("%-10s", field[i].name);
  15.     }
  16.     printf("\n");
  17.     while((row = mysql_fetch_row(mysql_res))) {
  18.         for(size_t i = 0; i < num_fields; ++i) {
  19.             printf("%-10s", row[i]);
  20.         }
  21.         printf("\n");
  22.     }
  23. }

  24. void get_test_data(MYSQL *mysql, test_data_t *data) {
  25.     MYSQL_ROW row;
  26.     mysql_query(mysql, "select * from test_table");
  27.     MYSQL_RES *mysql_res = mysql_store_result(mysql);
  28.     unsigned int num_fields = mysql_num_fields(mysql_res);
  29.     size_t *array[] = {&data->test_id, &data->t1, &data->t2, &data->t3};
  30.     if((row = mysql_fetch_row(mysql_res))) {
  31.         for(size_t i = 0; i < num_fields; ++i) {
  32.             sscanf(row[i], "%lu", array[i]);
  33.         }
  34.     }
  35.     mysql_free_result(mysql_res);
  36. }

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

  43. void task1(void) {
  44.     MYSQL mysql;
  45.     mysql_init(&mysql);
  46.     mysql_real_connect(&mysql, "localhost", "name1", "password1", "test_database", 0, NULL, 0);
  47.     for(size_t i = 0; i < 1000; ++i) {
  48.         test_data_t data;
  49.         usleep(200);
  50.         mysql_query(&mysql, "lock tables test_table write");
  51.         get_test_data(&mysql, &data);
  52.         ++data.t1;
  53.         set_test_data(&mysql, &data);
  54.         mysql_query(&mysql, "unlock tables");
  55.     }
  56.     mysql_close(&mysql);
  57.     exit(0);
  58. }

  59. void task2(void) {
  60.     MYSQL mysql;
  61.     mysql_init(&mysql);
  62.     mysql_real_connect(&mysql, "localhost", "name2", "password2", "test_database", 0, NULL, 0);
  63.     for(size_t i = 0; i < 1000; ++i) {
  64.         test_data_t data;
  65.         mysql_query(&mysql, "lock tables test_table write");
  66.         get_test_data(&mysql, &data);
  67.         usleep(10);
  68.         ++data.t2;
  69.         set_test_data(&mysql, &data);
  70.         mysql_query(&mysql, "unlock tables");
  71.     }
  72.     mysql_close(&mysql);
  73.     exit(0);
  74. }

  75. void task3(void) {
  76.     MYSQL mysql;
  77.     mysql_init(&mysql);
  78.     mysql_real_connect(&mysql, "localhost", "name3", "password3", "test_database", 0, NULL, 0);
  79.     for(size_t i = 0; i < 1000; ++i) {
  80.         test_data_t data;
  81.         mysql_query(&mysql, "lock tables test_table write");
  82.         get_test_data(&mysql, &data);
  83.         ++data.t3;
  84.         set_test_data(&mysql, &data);
  85.         usleep(200);
  86.         mysql_query(&mysql, "unlock tables");
  87.     }
  88.     mysql_close(&mysql);
  89.     exit(0);
  90. }

  91. int main(void) {
  92.     MYSQL mysql;
  93.     mysql_init(&mysql);
  94.     mysql_real_connect(&mysql, "localhost", "root", "Bdj0=3)MpqsF", NULL, 0, NULL, 0);
  95.     mysql_query(&mysql, "create database if not exists test_database");
  96.     mysql_query(&mysql, "drop table if exists test_database.test_table");
  97.     mysql_query(&mysql, "create table if not exists test_database.test_table(test_id integer, \
  98.         t1 integer, t2 integer, t3 integer)");
  99.     mysql_query(&mysql, "insert into test_database.test_table(test_id, t1, t2, t3) select 0, 0, 0, 0 from dual \
  100.         where not exists(select * from test_database.test_table)");
  101.     mysql_query(&mysql, "create user if not exists 'name1'@'localhost' identified by 'password1'");
  102.     mysql_query(&mysql, "create user if not exists 'name2'@'localhost' identified by 'password2'");
  103.     mysql_query(&mysql, "create user if not exists 'name3'@'localhost' identified by 'password3'");
  104.     mysql_query(&mysql, "grant all on *.* to 'name1'@'localhost'");
  105.     mysql_query(&mysql, "grant all on *.* to 'name2'@'localhost'");
  106.     mysql_query(&mysql, "grant all on *.* to 'name3'@'localhost'");

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

  113.     mysql_query(&mysql, "select * from test_database.test_table");
  114.     MYSQL_RES *mysql_res = mysql_store_result(&mysql);
  115.     print_mysql_res(mysql_res);
  116.     mysql_free_result(mysql_res);
  117.     mysql_close(&mysql);
  118.     return 0;
  119. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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