【c++中引入mysql实现过程】

概要

最近在做一个项目,在GNSS定位程序中添加一个功能,把输出的定位结果(时间、坐标等)存入数据库,从而可以实时在地图中显示。遇到了一些问题,所以总结记录一下。

主要遇到两个比较少见的问题,1、dll文件找不到;2、Winsock2.h编译报错重定义冲突(这篇写太多了,下一篇写)

整体流程

首先,先下载安装mysql,网上都有很多教程了,就不展开讲了,可以参照大佬们的教程(超详细MySQL安装教程和基本使用教程(自定义安装))。

直接在官网下载mysql官网,建议不要用太新版本的,不稳定,和大佬教程一样,用的8.0.22.

下载完了根据大佬的教程安装就可以了。

安装完了之后,打开MySQL Workbench,连接本机的数据库。也可以用命令行(自己学一些mysql语句MySQL语句详解(最详细))。
在这里插入图片描述

在这里插入图片描述

跟安装时设置的端口一样,然后ok就行。

在这里插入图片描述

然后新建一个数据库,点击红框标出的按钮。

在这里插入图片描述

输入名字,点击apply就行了。

在左边可以查看数据库里的东西,在Tables里面,右键点击Table,可以新建一个表格。设置表格名字,有哪些项目,并定义其数据类型,是整型就是INT,浮点型用FLOAT或者DOUBLE,字符串就用VERCHAR,看着定义吧。PK是关键字。这是做好的表格,并插入了一些数据。

在这里插入图片描述

做完上面的测试之后,就可以在vs中引用了,我用的是vs19,这个版本应该是没有太大的影响。

如何引用也可以直接参照大佬们的教程C++中使用MySQL数据库,很详细,就不多说了。

遇到的一个问题就是dll文件未找到。

在这里插入图片描述

这时候需要把mysql安装目录中 lib文件夹下的libmysql.dll复制到项目的工作目录中。如果没有工作目录为空,就复制到解决方案所在目录下。(我这里是空的)

在这里插入图片描述
然后就可以在vs中测试连接数据库了。

需要引入一些库:

#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include "mysql.h"
using namespace std;

然后先定义并初始化数据库对象,并连接数据库:

	MYSQL mysql;
	mysql_init(&mysql);
	//连接的数据库(句柄、主机名、用户名、密码、数据库名、端口号、socket指针、标记)
	if (!mysql_real_connect(&mysql, "zhangsan", "zhangsan", "123456", "databases", 3306, nullptr, 0))
	{
		cout << "数据库连接失败" << mysql_errno(&mysql) << endl;
	}
	else
		cout << "数据库连接成功" << endl << endl;

可以向已经建好的表插入数据(注意输入的sql1需要是char类型,所以只需要把string的mysql语句转化成char类型就行,sql语句要规范):

	stringstream ss;
	double time = 245456;
	double X = 454611.544;
	double Y = 464698441.554;
	double Z = -5845441.544545;
	int NSAT = 25;
	string AMB = "float";

	ss <<fixed<<setprecision(4)<< "insert into crd_output(time, X, Y, Z, NSAT, AMB) values(" << time << ", '" << X << "', '" << Y << "', '" << Z << "', '" << NSAT << "', '" << AMB << "');";
	string str = ss.str();
	const char* sql1 = str.c_str();
	///< 调用查询接口
	if (mysql_query(&mysql, sql1))
	{
		cout << "插入失败" << ": " << mysql_errno(&mysql) << endl;
	}
	else
	{
		cout << "插入成功" << endl << endl;
	}

插入后,可以查看表中的数据:

	MYSQL_RES* res = nullptr;
	MYSQL_ROW row;
	string str_sql;
	str_sql = "select * from crd_output";
	const char* sql = str_sql.c_str();
	///< 调用查询接口
	if (mysql_real_query(&mysql, sql, (unsigned int)strlen(sql)))
	{
		cout << "查询失败" << ": " << mysql_errno(&mysql) << endl;
	}
	else
	{
		cout << "查询成功" << endl << endl;

		///< 装载结果集
		res = mysql_store_result(&mysql);

		if (nullptr == res)
		{
			cout << "装载数据失败" << ": " << mysql_errno(&mysql) << endl;
		}
		else
		{
			///< 取出结果集中内容
			while (row = mysql_fetch_row(res))
			{
				cout << row[0] << "  " << row[1] << "  " << row[2] << "  " << row[3] << "  " << row[4] << "  " << row[5] << endl;
			}
		}
	}

在这里插入图片描述
最后,清除数据,断开数据库连接:

	mysql_free_result(res);
	// 关闭数据库连接
	mysql_close(&mysql);

引用的博客

若涉及侵权,请联系我删除。

1、超详细MySQL安装教程和基本使用教程(自定义安装)
https://blog.youkuaiyun.com/Kc635908933/article/details/111715585

2、C++中使用MySQL数据库
https://blog.youkuaiyun.com/weixin_43450564/article/details/115537977

3、MySQL语句详解(最详细)
https://blog.youkuaiyun.com/qq_44944641/article/details/116840432

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值