vs2017 连接mysql数据库

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

但是我在我的mysql安装目录中没有看到这两个文件,去看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;
}

 

展开阅读全文

没有更多推荐了,返回首页