C进阶之实现数据库(mysql 5.0)版本通讯录

前言

     断断续续历时两天百度的知识探索,继静态,动态,文件版本的通讯录之后,倔强的我开启了数据库版本通讯录(在动态版本通讯录的基础上将通讯人信息数据插入数据库中,初始化通讯录完成后,再从数据库中查询通讯人信息数据)的痛苦长路,想说脏话但是稍微有些许不文明,所以我选择忍!!!!打代码两小时,大部分时间都在纠bug!!!老规矩,先上目录。

目录

1.准备工作(VS2019)

(1)mysql 5.0及任意mysql数据库管理软件(我的是SQLyog,也可以是Navicat等等)的下载(简述)

(2)在SQLyog中的准备工作

(3)在VS2019中的配置流程

2.mysql操作

(1)连接mysql(我建立的数据库名称sqlContactDatabase)数据库

(2)将通讯录中数据插入对应数据库中的personinfo表

(3)查询personinfo表中的联系人信息填入通讯录中


1.准备工作(VS2019)

      (1)mysql 5.0及任意mysql数据库管理软件(我的是SQLyog,也可以是Navicat等等)的下载(简述)

        mysql下载地址:https://www.mysql.com/cn/downloads/

        sqlyog下载地址:SQLyog - Download (softonic.com)

       注:一定要记住mysql安装在哪里,不然后续会影响VS2019配置,具体详细安装步骤百度上一大把,我就不再过多赘述了。

        如果mysql安装不成功,卸载也会有一定的小麻烦,所以一定要找靠谱的教程,这里我给大家分享一下我看过的对我有用博主的文章:

       MySQL完全卸载干净(图解)_Alworm的博客-CSDN博客_mysql完全卸载干净


      (2)在SQLyog中的准备工作

        1)安装登录好SQLyog后,鼠标右击创建数据库(也可以直接输入sql语句,记得将字符集设置为gb2312,不然对数据进行操作会乱码),创建时未设置可以选中数据库右击->改变数据库:

 

        2)如何在对应新建的数据库下右击新建表(统一和数据库一样的字符集),如下(列可以和我不一样,只要在使用sql语句中将自己列与个人信息结构体的成员变量对应起来就好了):

到这里关于mysql的配置就做好了,恭喜你又离成功更近一步!!!


      (3)在VS2019中的配置流程

                第一步,选中项目->属性

         第二步点击VC++目录->编辑包含目录和库目录->将mysql的include地址复制到包含目录中,而lib库地址复制到库目录中->确定,过程图如下:

 最后将图中两个文件复制放入通讯录项目中,如图:

这样VS的配置也完成啦!!!

可以测试一下自己有没有配置成功

包含一下如下使用有关mysql函数所需的头文件,如果有且不报错则配置成功


 2.mysql操作

      (1)连接mysql(我建立的数据库名称sqlContactDatabase)数据库

            废话不多说,注释都有,先上代码

//与数据库建立连接
void createMysqlConnect(MYSQL* mysql) {
	//分配并初始化Mysql对象
	if (mysql_init(mysql) == NULL) {
		printf("mysql_init():%s\n", mysql_error(mysql));
		return;
	}

	/*
	1.尝试与运行在主机上的Mysql数据库引擎建立连接
	2.localhost为数据库连接的主机
	3.root为mysql用户名
	4.123456为mysql的密码
	5.zhang为连接到的数据库名称
	6.后面为默认参数
	*/
	if (mysql_real_connect(mysql, "localhost", "root", "123456", "sqlcontactdatabase", 0, NULL, 0) == NULL) {
		printf("mysql_real_connect():%s\n", mysql_error(mysql));
		return;
	}
	printf("Connected MYSQL successful!\n");
}

      (2)将通讯录中数据插入对应数据库中的personinfo表

//将contact中的联系人信息存入personinfo表中
void saveMysqlData(Contact* con, MYSQL* mysql) {
	//sql语句存放
	char sql[2048];
	//将mysql插入数据的语句放入sql数组中
	sprintf(sql, "insert into personinfo values('%s','%d','%s','%s','%s')", con->data[con->length].name,
		con->data[con->length].age, con->data[con->length].address, con->data[con->length].phoneNumber, con->data[con->length].sex);

	//printf("%s", sql);
	//mysql_query用于执行由“Null终结的字符串”查询指向的SQL语句查询,但不能用于包含二进制数据的查询,可使用mysql_real_query()取而代之
	//返回为0则成功执行sql语句,mysql_error用于打印执行sql语句失败的原因
	if (0 != mysql_query(mysql, sql)) {
		printf("%s\n", mysql_error(mysql));
		return;
	}
	printf("保存数据成功\n");
}

            注:具体函数使用可参考此文档https://www.mysqlzh.com/api/50.html

      (3)查询personinfo表中的联系人信息填入通讯录中

//从数据库中读入数据到通讯录中
void LoadContactData(Contact* con, MYSQL* mysql) {

	//mysql结果集指针
	MYSQL_RES* res = NULL;
	//mysql结果行
	MYSQL_ROW row;
	//sql语句存放
	char sql[1024];
	//把数据输出到字符串中
	sprintf(sql, "select * from personinfo");
	if (mysql_real_query(mysql, sql, (unsigned long)strlen(sql))) {
		printf("LoadContactData:%s\n", mysql_error(mysql));
		return;
	}
	//获取结果集
	res = mysql_store_result(mysql);

	//读取结果集的下一行,row为NULL时读取结束
	while (row = mysql_fetch_row(res)) {
		//判断是否增容
		isExpansion(con);
		strcpy(con->data[con->length].name, row[0]);//第一列为联系人姓名
		con->data[con->length].age = atoi(row[1]);//第二列为联系人年龄
		strcpy(con->data[con->length].address, row[2]);//第三列为联系人地址
		strcpy(con->data[con->length].phoneNumber, row[3]);//第四列为联系人电话
		strcpy(con->data[con->length].sex, row[4]);//第五列为联系人性别
		con->length++;//通讯录联系人增加1
	}
	//释放结果集
	mysql_free_result(res);
	printf("加载数据成功\n");
}

我的分享到此结束,有问题可以评论区互相交流哦!

具体代码实现我就不一一复制了,我把它们放在我的Gitee上啦,我的Gitee地址:10月19日C语言之实现数据库版本通讯录 · b071876 · Crystal/C_Practice - Gitee.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值