C语言连接mysql方法及遇到的问题-小白学习笔记

第一步,下载并安装MYSQL

mysql官网下载较慢,建议到腾讯软件中心下载->https://pc.qq.com/detail/3/detail_1303.html

安装教程->https://www.runoob.com/w3cnote/windows10-mysql-installer.html

第二步,在数据库中新建表格

打开mysql workbench,点击左上方菜单栏database->connect to database…,输入用户名密码。(也可以直接点击下方MySQL Connections进入)
在这里插入图片描述
在左边SCHEMAS区域点击鼠标右键新建一个schema
在这里插入图片描述
输入名字并点击apply
在这里插入图片描述

(重要的事情说三遍,一定要点击刷新!一定要点击刷新!一定要点击刷新!)
在table选项点击右键可以新建表
在这里插入图片描述

修改表的名字并编辑表结构,可以添加键并勾选是否主键、非空、唯一等,然后apply
在这里插入图片描述

当然,我们也可以直接用sql命令建表
在这里插入图片描述

鼠标移到表格处,表格右方会出现三个小圆图标,从左至右第一个显示表信息,第二个修改表结构,第三个查询表中所有信息
在这里插入图片描述

sql的增删查改等语句这里就不赘述了,我们可以适当往表格里添加一些数据便于后续查询等操作

第三步,编写C程序

建好了表之后,我们试着用c语言连接MYSQL数据库并查询内容(查test中visitor表格所有信息)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<mysql.h>
#pragma warning(disable:4996)

int main() {
 
 MYSQL mysql;
 MYSQL_RES *res;
 MYSQL_ROW row;
 int flag, t;
  
 mysql_init(&mysql);
 
 if (!mysql_real_connect(&mysql, "localhost", "root", "我是密码", "test", 0, NULL, 0))
 {
  printf("Failed to connect to Mysql!\n");
  return 0;
 }
 else
 {
  printf("Connected to Mysql successfully!\n");
 }
/*//插入语句,如果是插入就不需要res后面处理结果的语句
mysql_set_character_set(&mysql, "gbk");//该语句可解决插入语句中文编码问题
char query[] = "insert into visitor(vid,vname) values('20173015011344','张三')";
*/
char query[] = "select * from visitor"; //查询,成功则返回0
 flag = mysql_real_query(&mysql, query, (unsigned int)strlen(query));
 if (flag)
 {
  printf("Query failed!\n");
  return 0;
 }
 else
 {
  printf("[%s] made...\n", query);
 }   //mysql_store_result讲全部的查询结果读取到客户端
 
res = mysql_store_result(&mysql); //mysql_fetch_row检索结果集的下一行

while (row = mysql_fetch_row(res))
 {  //mysql_num_fields返回结果集中的字段数目
  for (t = 0; t < mysql_num_fields(res); t++)
  {
   printf("%s\t", row[t]);
  }
  printf("\n");
 }
 mysql_close(&mysql);
 system("PAUSE");
 return 0;
 }

遇到的问题

  1. 编译报错找不到源文件mysql/udf_registration_types.h错误
    原因:mysql_com.h文件1034行
    在这里插入图片描述
    由于C/C++里#include

    方式,编译器在编译时只会去编译器指定的类库目录下寻找header这个头文件,找不到就会报错。
    而#include "header"方式,编译器会先去当前项目目录下寻找header头文件,找不到的话再去编译器指定的类库目录下寻找。
    ‘mysql/udf_registration_types.h’这个头文件是在’/usr/include/mysql/mysql’下,即项目目录下,所以以#include “header” 方式来包含这个头文件就修复了所遇到的BUG。
    解决方案:尖括号<>改成双引号””(如图)

  2. 编译报错无法解析的外部符号_mysqlxxxxx
    原因:没有加入头文件和库文件
    解决方案:项目->属性->C/C+±>常规,右边第一项附加包含目录,加入mysql的include目录
    在这里插入图片描述
    链接器->常规,添加mysql的lib库目录
    在这里插入图片描述

链接器->输入,添加依赖项中添加libmusql.lib(记住要将这个文件(在mysql的lib目录中添加到工程文件或者C:\Windows\System32中))
在这里插入图片描述

  1. 编译仍然报错无法解析的外部符号 _mysql_real_connect…
    原因:vs建立的项目默认为win32项目,但是mysql支持的是64位的
    解决方案:项目->属性,平台改为x64。点击配置管理器,活动解决方案平台改为x64
    在这里插入图片描述

  2. 运行报错提示缺少“libmysql.dll”
    解决方案:安装MySql下的lib文件夹)中的libmysql.dll拷到项目下的Debug文件夹中,而是拷到项目下x64\Debug中(或者C:\Windows\System32中),然后重启

第一次用CSDN写博客,不太会用,中途被卡出去好多次,代码是一段一段粘贴上去的,如果发现了错误请及时指出,感激不尽~~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C语言中链接本地MySQL数据库,需要使用MySQL提供的C API。以下是链接本地MySQL数据库的基本步骤: 1. 安装MySQL C API库 在Windows系统中,可以从MySQL官方网站下载MySQL C API库的预编译版本。 在Linux系统中,可以通过包管理器安装MySQL C API库。 2. 在C代码中包含MySQL C API头文件 ``` #include <mysql/mysql.h> ``` 3. 初始化MySQL连接 ``` MYSQL *conn; conn = mysql_init(NULL); if (conn == NULL) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } ``` 4. 连接MySQL服务器 ``` if (mysql_real_connect(conn, "localhost", "username", "password", "database", 0, NULL, 0) == NULL) { fprintf(stderr, "%s\n", mysql_error(conn)); mysql_close(conn); exit(1); } ``` 注:在上面的代码中,"localhost"表示MySQL服务器的主机名,"username"和"password"表示MySQL用户的用户名和密码,"database"表示要连接的数据库名。 5. 执行SQL语句 ``` if (mysql_query(conn, "SELECT * FROM table_name")) { fprintf(stderr, "%s\n", mysql_error(conn)); mysql_close(conn); exit(1); } MYSQL_RES *result; MYSQL_ROW row; result = mysql_store_result(conn); if (result == NULL) { fprintf(stderr, "%s\n", mysql_error(conn)); mysql_close(conn); exit(1); } while ((row = mysql_fetch_row(result))) { printf("%s %s\n", row[0], row[1]); } mysql_free_result(result); mysql_close(conn); ``` 注:在上面的代码中,"SELECT * FROM table_name"是要执行的SQL语句,"mysql_store_result"函数用于获取查询结果,"mysql_fetch_row"函数用于逐行获取查询结果。 以上就是在C语言中链接本地MySQL数据库的基本步骤。需要根据实际情况进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值