找回密码
 立即注册
首页 资源区 代码 C语言操作数据库

C语言操作数据库

迫蔺 前天 00:22
基于C语言的控制数据库脚本

开发环境基础

编译器:Visual Studio Community 2022
数据库:MySQL 8.0.37 Community
前戏准备


  • 复制文件和路径
    找到MYSQL的安装目录


  • 复制“lib文件夹里的libmysql.dll文件”
    例:
    1.bmp

  • 复制目录下include和lib两个文件夹的路径
    例:
    D:\MySQL\include
    D:\MySQL\bin

  • VS环境配置


  • 在Visual Studio 2022新建空项目
  • 项目->属性->配置属性->VC++目录->分别将include和lib文件夹的路径添加到包含目录和库目录
    2.bmp


  • 文件导入
    将libmysql.dll文件粘贴到Visual Studio 2022项目文件夹下
    例:
    3.bmp

代码编写
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <winsock.h>
  4. #include <mysql.h>
  5. #pragma comment (lib, "libmysql.lib")
  6. int main()
  7. {
  8.         //变量定义
  9.         MYSQL* conn; //数据库连接句柄
  10.         MYSQL_RES* res; //执行数据库语言结果
  11.         MYSQL_ROW row; //存放一个数据记录
  12.         char* server = "localhost";//本地连接
  13.         char* user = "root";//
  14.         char* password = "123456";//mysql密码
  15.         char* database = "mysql_test";//数据库名
  16.         char* query = "select * from student";//需要查询的语句
  17.         int t;
  18.         conn = mysql_init(NULL); //句柄初始化
  19.         //尝试连接到数据库
  20.         if (!mysql_real_connect(conn, server, user, password, database, 3306, NULL, 0))  //判断是否连接成功
  21.         {
  22.                 printf("Error connecting to database:%s\n", mysql_error(conn));
  23.         }
  24.         else
  25.         {
  26.                 printf("Connected...\n");
  27.         }
  28.         //字符编码,解决乱码
  29.         if (!mysql_set_character_set(conn, "gbk"))
  30.         {
  31.                 printf("New client character set: %s\n",
  32.                         mysql_character_set_name(conn));
  33.         }
  34.         //调用API根据用户输入的Query对数据库操作
  35.         if (mysql_query(conn, query))
  36.         {
  37.                 printf("Error making query:%s\n", mysql_error(conn));
  38.         }
  39.         else
  40.         {
  41.                 printf("Query made...\n");
  42.                 res = mysql_use_result(conn);        //获取结果
  43.                 if (res)
  44.                 {
  45.                         while ((row = mysql_fetch_row(res)) != NULL)
  46.                         {
  47.                                 //printf("num=%d\n",mysql_num_fields(res));//列数
  48.                                 for (t = 0; t < mysql_num_fields(res); t++)
  49.                                         printf("%8s ", row[t]);
  50.                                 printf("\n");
  51.                         }
  52.                 }
  53.                 mysql_free_result(res);   //释放res占用的内存空间
  54.         }
  55.         mysql_close(conn); //断开数据库
  56.         //system("pause");
  57.         return 0;
  58. }
复制代码
MYSQL搭建测试数据库


  • 新建测试数据库
  1. drop database if exists mysql_test cascade;
  2. create database mysql_test;
  3. use mysql_test;
复制代码

  • 创建学生表
  1. create table student (
  2.         s_id int,
  3.         s_name varchar(8),
  4.         s_birth date,
  5.         s_sex varchar(4)
  6. );
复制代码

  • 插入学生数据
  1. insert into student values
  2. (1,'赵雷','1990-01-01','男'),
  3. (2,'钱电','1990-12-21','男'),
  4. (3,'孙风','1990-05-20','男'),
  5. (4,'李云','1990-08-06','男'),
  6. (5,'周梅','1991-12-01','女'),
  7. (6,'吴兰','1992-03-01','女'),
  8. (7,'郑竹','1989-07-01','女'),
  9. (8,'王菊','1990-01-20','女');
复制代码
代码测试


  • 编译
    生成->重新生成解决方案
    出现:“全部重新生成:1成功,0失败,0已跳过”即编译完成,无错误
    4.bmp

  • 调试
    ->按下调试按钮F5
    运行成功,如图所示
    5.bmp

  • 报错


  • 错误
    编译时出现C2440,E0144这两个报错代码
  • 解决办法
    项目->属性->C/C++->语言->符合模式->将“是”改为“否”

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册