日期:2014-05-16  浏览次数:20748 次

如何在MYSQL中用C语言实现事务处理


有什么办法在C语言中实现MYSQL的事务处理哦?

MYSQL没有提供对事务处理的函数,只能用如begin,commit,rollback的命令实现吗?

------解决方案--------------------
看它的SDK
------解决方案--------------------
自己写了个用C的例子~~ 编译运行通过
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h "
#define CONN_HOST "localhost "
#define CONN_USER "guest "
#define CONN_PASS "123456 "
#define CONN_DB "lhy "
#define CONNECTNG 0
#define CONNECTOK 1
#define TRUE 1
#define FAUSLE 0


// global MySQL handler

MYSQL mysql;
int g_MessegeConnect = 0;

// 连接MYSQL数据库 ,返回值保存在全局变量g_MessegeConnect中
int mysql_connet_test()
{
//init MySQL handler
if (!mysql_init(&mysql))
{
return(CONNECTNG);
}
//connect to MySQL
if (!mysql_real_connect(&mysql, CONN_HOST , CONN_USER , CONN_PASS, NULL , MYSQL_PORT, NULL, 0))
{
return(CONNECTNG);
}

//select Database
if (mysql_select_db(&mysql, CONN_DB))
{
return(CONNECTNG);
}
return(CONNECTOK);
}

//向数据库里添加记录,无论成功与否,退出时,关闭连接
//参数说明:SQL 执行的SQL语句

int mysql_insert_data(char*Sql)
{
//事务处理
short Flag = TRUE;
if (mysql_query(&mysql, "BEGIN "))
{
printf( "error: BEGIN ");
Flag = FAUSLE;
return(FAUSLE);
}
//执行SQL语句
if(Flag == TRUE)
{
if ( mysql_query(&mysql, Sql))
{
printf( "error:%S ",Sql);
Flag = FAUSLE;
// 出错数据回滚
mysql_query(&mysql, "ROLLBACK ");
return(FAUSLE);
}
}
// 正确就commit提交数据
if(Flag == TRUE)
{
if ( mysql_query(&mysql, "COMMIT "))
{
printf( "error: COMMIT ");
return(FAUSLE);
}
}
//close mysql
mysql_close(&mysql);
}


//查询数据库里记录,无论成功与否,退出时,关闭连接
//参数说明:
int mysql_select_data(char*Sql)
{
int i;
MYSQL_RES *res;
MYSQL_ROW row;
//excute Select语句
if ( mysql_query(&mysql, Sql))
{
printf( "error:%S ",Sql);
return(FAUSLE);
}
// store result
if (!(res = mysql_store_result(&mysql)))
{
printf( "error:%S ",Sql);
return(FAUSLE);
}
// fetch row and get the result
while((row = mysql_fetch_row(res)))
{
for (i=0 ; i < mysql_num_fields(res); i++)
{
printf( "%s\n ",row[i]);
}

printf( "\n ");

}
//free result
mysql_free_result(res);
//close mysql
mysql_close(&mysql);
}

main()
{
char *Sql = "SELECT * FROM species ";
if( (g_MessegeConnect=mysql_connet_test())== CONNECTOK )
{
mysql_select_data(Sql);
}
Sql = "INSERT INTO species (id,name) VALUES ( '19 ', 'monkeying ') ";
if( (g_MessegeConnect=mysql_connet_test())== CONNECTOK )
{
mysql_insert_data(Sql);
}
Sql = "SELECT * FROM species ";
if( (g_MessegeConnect=mysql_connet_test())== CONNECTOK )
{
mysql_select_data(Sql);
}
return 0;
}