C连接MySQL数据库开发之Windows环境配置及测试

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> C连接MySQL数据库开发之Windows环境配置及测试


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <mysql.h>
 
void testQuery(MYSQL *mysql);    // 测试查询数据
 
void main()
{
    MYSQL *mysql = NULL;
 
    /*初始化MYSQL连接句柄*/
    mysql = mysql_init((MYSQL *)0);
    if (!mysql)
    {
        return;
    }
 
    /*
        连接数据库,连接成功返回conn,否则返回NULL
        参数1:mysql_init初始化数据库返回的MYSQL句柄
        参数2:数据库服务器地址
        参数3:数据库用户名
        参数4:数据库密码
        参数5:数据库名称
        参数6:数据库端口,为0表示默认3306
        参数7:如果unix_socket不是NULL,字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型
        参数8:通常是0
    */
    mysql = mysql_real_connect(mysql, "localhost","root", "root", 
        "test", 0, NULL, 0);
    if (mysql)
    {
        printf("connection succellfull the database!\n");
    }
    else
    {
        printf("connection error:%d, %s\n",mysql_errno(mysql), mysql_error(mysql));
    }
 
    // 查询数据
    testQuery(mysql);
 
    // 关闭连接
    mysql_close(mysql);
 
    system("pause");
}
 
// 测试查询
void testQuery(MYSQL *mysql)
{
    MYSQL_ROW row;
    MYSQL_RES *res = NULL;
    MYSQL_FIELD *fields = NULL;
    int i, field_count;
    char *sql = "select * from t_user";
    int flag = mysql_real_query(mysql, sql, (unsigned long)strlen(sql));
    if (flag)
    {
        printf("Query error:%d, %s\n",mysql_errno(mysql), mysql_error(mysql));
        return;
    }
 
    // 将查询结果读到内存当中
    res = mysql_store_result(mysql);
 
    // 获取结果集中的所有字段
    fields = mysql_fetch_fields(res);
 
    // 字段数量
    field_count = mysql_field_count(mysql);
    for (i = 0; i < field_count; i++)
    {
        printf("%s\t", fields[i].name);
    }
 
    printf("\n");
    
    // 遍历结果集的每一行数据
    while (row = mysql_fetch_row(res))
    {
        for (i = 0; i < field_count; i++)
        {
            printf("%s\t", row[i]);
        }
        printf("\n");
    }
}

 

mysql测试数据及表结构:


DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
 
LOCK TABLES `t_user` WRITE;
INSERT INTO `t_user` VALUES (1,'zhangsan',22,'hunan'),(2,'lisi',30,'beijin');
UNLOCK TABLES;

测试结果:

 

 

小结配置步聚:

1> 安装mysql

2> 创建VS工程,配置工程头文件(mysql.h所在目录)和库文件(libmysql.lib所在目录)附加目录,指向mysql对应的目录

3> 将libmysql.dll动态库拷贝到工程根目录或Debug目录

4> 编写测试程序,验证C连接Mysql数据库

———————————————————————-优雅的分割线————————————————————————————

常见错误:

1、main.obj : error LNK2019: 无法解析的外部符号 mysql_init。。。。。

原因是没有在工程当中添加libmysql.lib配置,

 

2、无法启动此程序,因为计算机中丢失libmyslq.dll。。。。

将libmysql.dll动态库拷贝到工程的根目录或Debug目录下。

 

3、未引入windows.h头文件,因为在windows连接mysql是通过socket方式与数据库进行通信的

 

4、main.obj : error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用…..

数据库位数与编译位数不一致,导致在链接时mysql的库函数找不到,比如:我的mysql是64位,提供的库当然是64位的,如果你在VS上用32位的平台去编译就会造成链接时出错。

 

修改编译平台,工程–>属性–>配置管理器–>在解决方案的工程列表中选择对应的项目,并将其修改成32位或64位,如果没有就新建一个。

 

 

工程源码下载:

 

参考文档:

出处:

原文地址:https://sihai.blog.csdn.net/article/details/82746044

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> C连接MySQL数据库开发之Windows环境配置及测试


 上一篇
Oracle 11g安装步骤详谈 Oracle 11g安装步骤详谈
出处: 一、Oracle  注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可。 路径名称中,最好不要出现中文,也不要出现空格等不规则字符。   官方下地址: http://www.oracle.com/technetw
2021-04-04
下一篇 
SpringBoot 使用WebSocket打造在线聊天室(基于注解) SpringBoot 使用WebSocket打造在线聊天室(基于注解)
点击上方“好好学java”,选择“置顶公众号” 优秀学习资源、干货第一时间送达!  精彩内容  一、打造 WebSocket 聊天客户端 温馨提示:得益于W3C国际标准的实现,我们在浏览器JS就能直接创建WebSocket对象,再通过
2021-04-04