Mysql C 带事务管理的添删查改

今天写的例子,只贴代码,不使用文字说明.
mysqltool.h

#include  < stdio.h >
#include 
< stdlib.h >
#include 
< winsock.h >
#include 
< mysql.h >


int  xinsert(MYSQL  * mysql, char   * strsql)
{    
     
int  t; 
     MYSQL_RES 
* res;
     t
= mysql_real_query(mysql,strsql,(unsigned  int )strlen(strsql));

     
if (t){
           printf( 
" Error id=%d  Error: %s/n " ,mysql_errno(mysql),mysql_error(mysql));
           
return  mysql_errno(mysql);
     }
else {
         res
= mysql_store_result(mysql);  
         printf(
" 插入行数=%d/n " ,mysql_affected_rows(mysql));
         mysql_free_result(res);
     }

     
return   0 ;

}

int  xupate(MYSQL  * mysql, char   * strsql)
{    
     
int  t; 
     MYSQL_RES 
* res;
     t
= mysql_real_query(mysql,strsql,(unsigned  int )strlen(strsql));
     
if (t){
           printf( 
" Error id=%d  Error: %s/n " ,mysql_errno(mysql),mysql_error(mysql));
           
return  mysql_errno(mysql);
     }
else {
         res
= mysql_store_result(mysql);  
         printf(
" 更新行数=%d/n " ,mysql_affected_rows(mysql));
         mysql_free_result(res);
     }
     
return   0 ;
}

int  xdelete(MYSQL  * mysql, char   * strsql)
{    
     
int  t; 
     MYSQL_RES 
* res;
     t
= mysql_real_query(mysql,strsql,(unsigned  int )strlen(strsql));
     
if (t){
           printf( 
" Error id=%d  Error: %s/n " ,mysql_errno(mysql),mysql_error(mysql));
           
return  mysql_errno(mysql);
     }
else {
         res
= mysql_store_result(mysql);  
         printf(
" 删行数=%d/n " ,mysql_affected_rows(mysql));
         mysql_free_result(res);
     }
     
return   0 ;

}


one.c 代码如下:
#include  < stdlib.h >
#include 
< winsock.h >
#include 
< mysql.h >
#include 
< stdio.h >
#include 
< mysqltool.h >

int  main()
{
      MYSQL mysql;     
// mysql连接 
      MYSQL_RES  * res;  // 这个结构代表返回行的一个查询结果集 
      MYSQL_ROW row;  // 一个行数据的类型安全(type-safe)的表示
       char   * query;   // 查询语句 
       int  t,r;
      mysql_init(
& mysql);

      
      
if  ( ! mysql_real_connect( & mysql, " localhost " " lottobar " " 123456 " " lottobar " , 3306 ,NULL, 0 ))
      {
         printf( 
" Error connecting to database: %s/n " ,mysql_error( & mysql));
      }  
else  
         printf(
" Connected /n " );
     
      
      query
= " SET CHARACTER SET GBK " // 设置编码 
      t = mysql_real_query( & mysql,query,(unsigned  int )strlen(query));
      
if (t)
      {
           printf(
" 编码设置失败/n " );
      }
      query
= "  select * from demo  " ;
      t
= mysql_real_query( & mysql,query,(unsigned  int )strlen(query));
      
if (t)
      {
          printf(
" 执行查询时出现异常: %s " ,mysql_error( & mysql));
          
      }
else
          printf(
" [%s] 构建成功 /n " ,query);
      res
= mysql_store_result( & mysql);
      
while (row = mysql_fetch_row(res))
      {                              
           
for (t = 0 ;t < mysql_num_fields(res);t ++ )
           {
               printf(
" %s/t " ,row[t]);
           }
           printf(
" /n " );
      }
      mysql_free_result(res);
       
      t
= mysql_real_query( & mysql, " SET AUTOCOMMIT =0 " ,(unsigned  int )strlen( " SET AUTOCOMMIT =0 " ));
      
if (t){
            printf(
" 启用手工事务失败/n " );
      }
else {
            printf(
" 启用手工事务成功/n " );
      }
      t
= mysql_real_query( & mysql, " Begin ; " ,(unsigned  int )strlen( " Begin ; " ));
      query
= " insert into demo(name,age)values('老裴','89') " ;
      
int  inset_result = xinsert( & mysql,query);
      query
= " delete  from demo  where name='老裴' " ;
      
int  delete_result = xdelete( & mysql,query);
      query
= " update demo set name='裴屋村' where name='ccd' and inc_id=13 " ;
      
int  update_result = xupate( & mysql,query); 
      
      query
= " insert into demo(inc_id,name,age)values(16,'老裴','89') " ; // 执行会出现异常的语句 
       int  fail_result = xinsert( & mysql,query);
      
      
if (inset_result == 0   &&  delete_result == 0   &&  update_result == 0   &&  fail_result == 0 ){
           printf(
" 事务提交/n " );
           t
= mysql_real_query( & mysql, " COMMIT; " ,(unsigned  int )strlen( " COMMIT; " ));
      }
else {
           printf(
" 事务回滚/n " );
           t
= mysql_real_query( & mysql, " ROLLBACK; " ,(unsigned  int )strlen( " ROLLBACK; " ));
      }
      
      
return   0 ;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值