Windows系统下C语言连接MySQL
目录
前言
高级语言连接数据库技术可谓十分成熟,但是使用C语言连接数据库还是挺少的,之前做数据库课程设计的时候刚好用到C语言连接数据库,因此就把这次过程记录下来。
准备
- MySQL 5.6.48-64位
- MinGW64
- 假如你安装的MySQL是32位的,那么MinGW就需要安装32位版本的
- Visual Studio Code(其他编辑器也可以,有条件的可以用记事本)
开始搭建环境
-
配置
MinGW64
环境: -
项目中引入库文件
-
所在项目处新建文件夹
lib
,在MySQL
的安装目录下的lib
文件夹下找到libmysql.dll
文件(我的是在C:\Program Files\MySQL\MySQL Server 5.6\lib
文件夹下),将该文件复制到刚刚新建的lib
文件夹中 -
在程序中加入头文件:
#include <C:\Program Files\MySQL\MySQL Server 5.6\include\mysql.h>
(该路径自己根据自己的情况进行相应更改)#include <winsock.h>
-
测试
例如我有一个数据库test
,我要访问的是stu
表:
在项目位置新建main.c
文件:
/*
* @Author: YaleXin
* @Date: 2020-07-03 14:17:45
* @LastEditTime: 2020-07-03 14:53:58
* @LastEditors: YaleXin
* @Description:
* @FilePath: \my_c_workspace\DatabaseConnect\main.c
* @祈祷不出现BUG
*/
#include <winsock.h>
#include <C:\Program Files\MySQL\MySQL Server 5.6\include\mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define HOST "localhost"
#define PORT 3306
#define DBNAME "test"
#define TABLENAME "stu"
#define USERNAME "root"
#define PASW "123456"
int main() {
MYSQL mysql;
MYSQL_ROW row;
MYSQL_RES *res = (MYSQL_RES *)malloc(sizeof(MYSQL_RES));
mysql_init(&mysql);
if (mysql_real_connect(&mysql, HOST, USERNAME, PASW, DBNAME, PORT, NULL,
CLIENT_FOUND_ROWS)) {
printf("ok!\n");
char sql[50] = "";
// 告知此次是gbk
mysql_set_character_set(&mysql, "gbk");
sprintf(sql, "SELECT * FROM %s", TABLENAME);
if (mysql_real_query(&mysql, sql, (unsigned long)strlen(sql))) {
printf("查询失败,错误信息:%s", mysql_error(&mysql));
} else {
res = mysql_store_result(&mysql);
printf("|%-10s|%-10s|\n\n", "学号", "姓名");
while ((row = mysql_fetch_row(res)) != NULL) {
printf("|%-10s|%-10s|\n\n", row[0], row[1]);
}
mysql_free_result(res);
}
// 关闭连接,避免浪费资源
mysql_close(&mysql);
} else {
printf("登录失败!错误原因:%s\n是否退出:0:是,其他:否。\n",
mysql_error(&mysql));
}
return 0;
}
利用命令行进行编译,进入该项目位置,打开命令终端,输入:
gcc -Iinclude -Llib main.c -llibmysql -o main
如果足够幸运的话就会产生main.exe
文件,运行该文件,输出:
ok!
|学号 |姓名 |
|1 |张三 |
|2 |李四 |
|3 |王五 |
可能遇到的问题
error: unknown type name 'SOCKET'
#define my_socket SOCKET
加入头文件的顺序中,#include <winsock.h>
需要在#include <C:\Program Files\MySQL\MySQL Server 5.6\include\mysql.h>
上面
File format not recognized collect2.exe: error: ld returned 1 exit status
不知道是不是因为安装的MySQL
是64位,而编译器MinGw
是32位造成的,我尝试用32位进行编译的时候会出现上面的错误,换了64位的就不会出现问题了。
本文由「黄阿信」创作,创作不易,请多支持。
如果您觉得本文写得不错,那就点一下「赞赏」请我喝杯咖啡~
商业转载请联系作者获得授权,非商业转载请附上原文出处及本链接。
关注公众号,获取最新动态!
历史评论
开始评论