欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vs2017 连接mysql数据库

程序员文章站 2022-03-23 08:33:36
...

学习c++连接mysqlshujuk1,看网上的教程,连接mysql数据库,需要mysql安装目录中include和lib文件夹中的头文件和库。

但是我在我的mysql安装目录中没有看到这两个文件,去看mysql的安装引导,发现我有一个东西没点,

vs2017 连接mysql数据库

选择第一个,一路next,修改后就能在安装包中看见这两个文件夹。

 

在 属性-》配置属性-》c/c++-》常规-》附加包含目录 -------添加mysql安装目录中的include文件夹

在属性-》配置属性-》链接器-》常规-》附加库目录-------添加mysql安装目录中的lib中的opt文件夹(libmysql.lib库所在的文件夹)

在 属性-》配置属性-》链接器-》输入-》附加依赖项 -------添加   libmysql.lib

 

测试代码:

#include "stdafx.h"
#include "winsock.h"
#include "mysql.h"

int main()
{
	MYSQL * con = NULL; //= mysql_init((MYSQL*) 0); 
	
	char tmp[400];
	//database configuartion
	char dbuser[30] = "hu";			// 账号
	char dbpasswd[30] = "123123";	// 密码
	char dbip[30] = "127.0.0.1";	// mysql服务器IP
	char dbname[50] = "hutest";		// 数据库名字
	char *query = NULL;

	int rt;//return value  
	
	con = mysql_init(con);

	if (con != NULL && mysql_real_connect(con, dbip, dbuser, dbpasswd, NULL, 3306, NULL, 0)) {
		if (!mysql_select_db(con, dbname)) {
			printf("Select successfully the database!\n");
			con->reconnect = 1;
			
			// 设置客户端编码
			query = (char*)"set names 'gb2312'";
			
			rt = mysql_real_query(con, query, strlen(query));
			if (rt) {
				printf("Error making query: %s !!!\n", mysql_error(con));
			}
			else {
				printf("query %s succeed!\n", query);
			}
		}
	}
	else {
		printf("Unable to connect the database,check your configuration!\n");
	}

	while (true)
	{
		printf("请输入sql命令:\n");
		//gets_s(tmp);
		strcpy_s(tmp,"select * from account");

		if (strcmp(tmp, "exit") == 0)
		{
			break;
		}
		//执行sql语句
		rt = mysql_real_query(con, tmp, strlen(tmp));
		if (rt)
		{
			printf("Error making query: %s !!!\n", mysql_error(con));
		}
		else
		{
			printf("%s executed!!!\n", tmp);
		}
		// 获取sql查询结果
		MYSQL_RES *res = mysql_store_result(con); //将结果保存在res结构体中

		if (res != NULL) {

			///////////////////////////
			printf("row_count:%d\n",res->row_count);	//数据的数量
			printf("lengths:%d\n", res->lengths);
			printf("field_count:%d\n", res->field_count);		//一项数据属性字段的数量
			printf("current_field:%d\n", res->current_field);
			printf("--------------------FIELD-----------------------\n");

			// 获取指定位置的 属性字段数据 位置从0开始
			// mysql_fetch_field_direct
			MYSQL_FIELD *fields = mysql_fetch_fields(res);

			for (int i = 0; i < res->field_count; i++)
			{
				printf("name:%s\n", fields[i].name);
				printf("table:%s\n", fields[i].table);
				printf("db:%s\n", fields[i].db);
			}


			unsigned int num_fields;
			unsigned int i;
			//MYSQL_FIELD *fields;

			num_fields = mysql_num_fields(res);
			fields = mysql_fetch_fields(res);
			for (i = 0; i < num_fields; i++)
			{
				printf("Field %u is %s\n", i, fields[i].name);
			}

			printf("--------------------ROWS-----------------------\n");
			// 直接从res中获取数据
			MYSQL_ROWS *rows = res->data_cursor;
			printf("length:%uld\n", rows->length);
			printf("row num:%d\n", mysql_num_rows(res));
			
			while (rows != NULL)
			{
				for (int i = 0; i < 2; i++)
				{
					printf("|%s",rows->data[i]);
				}
				printf("|\n");
				rows = rows->next;
			}

			printf("-------------------------------------------\n");


			//////////////////////////////////////////////////////////
			//	mysql_num_rows()来找出结果集中的行数
			//	mysql_field_count() 返回表的列数
			//	mysql_num_fields(res) 获取字段数量
			//	mysql_fetch_row() 来获取多行结果的一行内容
			//	mysql_fetch_fields()来获取表头的内容
			//////////////////////////////////////////////////////////

			// 一般获取查询结果的方式
			MYSQL_ROW row;
			int count = 0;
			unsigned int t;
			while (row = mysql_fetch_row(res)) {
				for (t = 0; t<mysql_num_fields(res); t++) {
					printf("%s ", row[t]);
				}
				printf("\n");
				count++;
			}
			printf("number of rows %d\n", count);

			// 释放结果集
			mysql_free_result(res);
		}
		system("pause");
	}
	// 关闭连接
	mysql_close(con);

	system("pause");
	return 0;
}

 

相关标签: a