天天看點

C++中MySQL應用案例

這是一個完整的MySQL應用案例:

采用的MySQL

version MySQL Server 5.7

// mysqltest.cpp : 定義控制台應用程式的入口點。
//

#include "stdafx.h"
#include "mysql.h"
enum MyEnum
{
	Success = 0,
	Initfail,
	Conectfail,
	Queryfail
};

int main()
{
	MYSQL g_mySQLHandle_ex;
	MYSQL_RES *result = NULL;
	MYSQL_ROW row;
	int rainfallvalue = 0;
	char cSql[1024] = { 0 };
	int res = -1;
	int loop = 0;
	int err = 0;

	//初始化mysql
	if (mysql_init(&g_mySQLHandle_ex) == NULL)
	{
		printf("mysql_init failed.\n");
		return Initfail;
	}
	printf("mysql_init success.\n");
	//連接配接mysql
	if (mysql_real_connect(&g_mySQLHandle_ex,
		"127.0.0.1",
		"root", "123456", "qq", 3306, NULL, 0))
	{
		printf("connect mysql success\n");
	}
	else
	{
		printf("connect mysql failed\n");
		return Conectfail;
	}



	//create rainfall 
	//sprintf(strSQL, "select * FROM rainfall where rainfallthreadhold='rainfallthreadholdvalue'");
	sprintf_s(cSql, "create table if not exists rainfall( name VARCHAR(32) NOT NULL, value INT(11) NOT NULL);");
	do
	{
		try
		{
			res = mysql_query(&g_mySQLHandle_ex, cSql);
			if (res == 0)//表示成功執行
			{
				result = mysql_store_result(&g_mySQLHandle_ex);
				if (result)
				{
					mysql_free_result(result);
				}
			}
			else
			{
				const char * perr = mysql_error(&g_mySQLHandle_ex);
				printf("excute %s err:%s", cSql, perr);
				err = mysql_errno(&g_mySQLHandle_ex);
				throw err;
			}
		}
		catch (int err)
		{
			if ((err >= 2000) && (err <= 2054))
			{
				mysql_close(&g_mySQLHandle_ex);
				//...再次初始化
				if (mysql_init(&g_mySQLHandle_ex) == NULL)
				{
					printf("mysql_init failed.\n");
					return Initfail;
				}
				printf("mysql_init success.\n");
				//連接配接mysql
				if (mysql_real_connect(&g_mySQLHandle_ex,
					"127.0.0.1",
					"root", "123456", "qq", 3306, NULL, 0))
				{
					printf("connect mysql success\n");
				}
				else
				{
					printf("connect mysql failed\n");
					return Conectfail;
				}
			}
		}
		++loop;

	} while (res&&loop < 5);//如果失敗了,重複5次



	//如果查詢成功傳回0,否則傳回其它數字,這裡的成功是指該函數沒有發生錯誤,不是指沒有查詢到結果集
	//這裡的查詢可以根據上面進行優化
	loop = 2;
	while (loop > 0)
	{
		res = mysql_query(&g_mySQLHandle_ex, "select * from rainfall");
		printf("res=%d\n", res);
		if (0 == res)
		{
			result = mysql_store_result(&g_mySQLHandle_ex);
			//看看查詢影響了多少行 mysql_affected_rows(result);
			int affectedrow = mysql_num_rows(result);
			printf("affected row=%d\n", affectedrow);
			if (affectedrow)//如果查詢到有結果就進行取值
			{
				while (row = mysql_fetch_row(result))
				{
					rainfallvalue = atoi(row[1]);
					printf("rainfall name= %s, value=%d\n", row[0], rainfallvalue);//傳回的都是字元串,不能
				}
			}
			if (result)//在這裡釋放結果集
			{
				mysql_free_result(result);
			}
			loop = 0;
			return Success;
		}
		else
		{
			const char * perr = mysql_error(&g_mySQLHandle_ex);
			loop--;
		}
		return Queryfail;
	}

	return Success;
}


           

繼續閱讀