這是一個完整的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;
}