博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux c mysql 开发
阅读量:3587 次
发布时间:2019-05-20

本文共 5004 字,大约阅读时间需要 16 分钟。

二、安装mysql开发包

sudo apt-get install libmysqlclient-dev

Ubuntu Package查询地址(输入关键词查询到最新的package名字,比如libmysqlclient,然后装最新的版本):

三、如何调用MYSQL库文件

加入头文件: #include <mysql/mysql.h>

#include <mysql/mysql.h>

#include "stdio.h"
int main()
{
printf("i love c\n");
return 0;
}  

保存为test.c

四、编译方法

gcc -o test test.c -lmysqlclient

或(c++程序)

g++ -o test test.cpp -lmysqlclient

还是找不到mysql.h?添加参数-I/usr/include/mysql/看看(示例如下),假设mysql.h在该目录下。

gcc -o test test.c -lmysqlclient -I/usr/include/mysql/

执行:

./test

例子

MYSQL DbObj;  //handle
MYSQL_RES *pRes; //result
MYSQL_ROW  sqlrow; //row
int main()
{
char strsql[200];
char username[20];
char password[20];
sprintf(username,"root");
sprintf(password,"123456");
mysql_init(&DbObj);
if(!mysql_real_connect(&DbObj,"192.168.75.131",username,password,"test",0,NULL,0) )
{
return 0;
}
sprintf(strsql,"select * from person");
int res=mysql_query(&DbObj,strsql);
pRes=mysql_use_result(&DbObj);
if( (sqlrow=mysql_fetch_row(pRes))!=NULL )
{
mysql_free_result(pRes);//释放记录集
printf("Ok.\n");
  }
mysql_close(&DbObj);

再次改进,读字段名和记录

#include <mysql/mysql.h>

#include "stdio.h"
#include <string.h>
MYSQL DbObj;  //handle
MYSQL_RES *pRes; //result
MYSQL_ROW  sqlrow; //row
void display_row();
void display_head();
int main()
{
char strsql[200];
char username[20];
char password[20];
int first_row=1;
sprintf(username,"root");
sprintf(password,"123456");
mysql_init(&DbObj);
if(!mysql_real_connect(&DbObj,"192.168.75.131",username,password,"test",0,NULL,0) )
{
return 0;
}
sprintf(strsql,"select * from person");
int res=mysql_query(&DbObj,strsql);
if(res)
{
fprintf(stderr,"select error: %s\n",mysql_error(&DbObj) );
}
else
{
pRes=mysql_use_result(&DbObj);
if(pRes)
{
while( (sqlrow=mysql_fetch_row(pRes))!=NULL )
{
if(first_row)
{
display_head();
first_row=0;
}
display_row();
}
}
}
mysql_close(&DbObj);
/*
  读字段名
*/
void display_head()
{
MYSQL_FIELD *field_ptr;
printf("column  details:\n");
while( (field_ptr=mysql_fetch_field(pRes))!=NULL )
{
printf("Name:%s\t\n",field_ptr->name);
printf("Type:\t" );
if(IS_NUM(field_ptr->type))
    {
        printf("Numeric filed\n");
    }
    else
    {
    switch(field_ptr->type)
    {
    case FIELD_TYPE_VAR_STRING:
    printf("varchar \n");
    break;
    case FIELD_TYPE_LONG:
    printf("Long \n");
    break;
    default:
    printf("Type is %d,check in mysql_com.h\n",field_ptr->type);
    }
    }
    
}
}
/*
 读行记录
*/
void display_row()
{
    unsigned int field_count;
    field_count = 0;
    while(field_count<mysql_field_count(&DbObj))
    {
        if(sqlrow[field_count]) printf("%s ",sqlrow[field_count]);
        else printf("NULL");
        field_count++;
    }
    printf("\n");
}

继续改进,加上事务,加上执行insert ,update

#include <mysql/mysql.h>

#include "stdio.h"
#include <string.h>
MYSQL DbObj;  //handle
MYSQL_RES *pRes; //result
MYSQL_ROW  sqlrow; //row
void display_row();
void display_head();
int main()
{
char strsql[200];
char insrtsql[200];
char username[20];
char password[20];
int first_row=1;
int t=-1;
sprintf(username,"root");
sprintf(password,"lovepxm");
mysql_init(&DbObj);
if(!mysql_real_connect(&DbObj,"192.168.75.131",username,password,"test",0,NULL,0) )
{
fprintf(stderr,"无法连接到数据库,错误原因是:%s/n",mysql_error(&DbObj));
return 0;
}
sprintf(insrtsql,"%s","insert into person (person_name) Values ('xx')");
  mysql_query(&DbObj,insrtsql);
 
  t=mysql_real_query(&DbObj,"SET AUTOCOMMIT =0",(unsigned int)strlen("SET AUTOCOMMIT =0"));
  if(t){
     printf("启用手工事务失败\n");
  }else{
     printf("启用手工事务成功\n");
  }
  t=mysql_real_query(&DbObj,"Begin ;",(unsigned int)strlen("Begin ;")); //开启事务
  
  sprintf(insrtsql,"%s","insert into person (person_name) Values ('yyyy')");
  int inset_1=mysql_query(&DbObj,insrtsql);
  
  sprintf(insrtsql,"%s","insert into person (person_name) Values ('ok')");
  int inset_2=mysql_query(&DbObj,insrtsql);      
  
  if(inset_1==0 && inset_2==0 ){    //结束事务
      printf("事务提交\n");
      t=mysql_real_query(&DbObj,"COMMIT;",(unsigned int)strlen("COMMIT;"));
  }else{
      printf("事务回滚\n");
      t=mysql_real_query(&DbObj,"ROLLBACK;",(unsigned int)strlen("ROLLBACK;"));
  }
  
sprintf(strsql,"select * from person");
int res=mysql_query(&DbObj,strsql);
if(res)
{
fprintf(stderr,"select error: %s\n",mysql_error(&DbObj) );
}
else
{
pRes=mysql_use_result(&DbObj);
if(pRes)
{
while( (sqlrow=mysql_fetch_row(pRes))!=NULL )
{
if(first_row)
{
display_head();
first_row=0;
}
display_row();
}
}
}
mysql_close(&DbObj);
/*
  读字段名
*/
void display_head()
{
MYSQL_FIELD *field_ptr;
printf("column  details:\n");
while( (field_ptr=mysql_fetch_field(pRes))!=NULL )
{
printf("Name:%s\t\n",field_ptr->name);
printf("Type:\t" );
if(IS_NUM(field_ptr->type))
    {
        printf("Numeric filed\n");
    }
    else
    {
    switch(field_ptr->type)
    {
    case FIELD_TYPE_VAR_STRING:
    printf("varchar \n");
    break;
    case FIELD_TYPE_LONG:
    printf("Long \n");
    break;
    default:
    printf("Type is %d,check in mysql_com.h\n",field_ptr->type);
    }
    }
    
}
}
/*
 读行记录
*/
void display_row()
{
    unsigned int field_count;
    field_count = 0;
    while(field_count<mysql_field_count(&DbObj))
    {
        if(sqlrow[field_count]) printf("%s ",sqlrow[field_count]);
        else printf("NULL");
        field_count++;
    }
    printf("\n");
}

http://www.metsky.com/archives/554.html

http://www.cnblogs.com/co1d7urt/archive/2012/10/23/2735320.html

你可能感兴趣的文章
重学JavaScript(01):JS代码为什么可以在浏览器中运行?
查看>>
两天,我把分布式事务搞完了
查看>>
肝!分享两本高质量网络/算法书籍,进大厂必备!
查看>>
建表参数(pctfree,IniTrans,maxtrans)含义
查看>>
springBoot官方入门篇一 引入依赖并运行
查看>>
python之正则表达式(基础篇)
查看>>
python之正则表达式(复杂篇)
查看>>
北京ISC大会3日游随笔
查看>>
Raspberry Pi 3B+ 修改root初始密码,root登录
查看>>
PBRNet:Progressive Boundary Refinement Network for Temporal Action Detection (AAAI 2020)
查看>>
TypeError: create_target_machine() got an unexpected keyword argument ‘jitdebug‘解决方案
查看>>
FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracking 效果展示
查看>>
数据结构与算法-python实现堆栈,队列
查看>>
数据结构与算法-python实现无序表(单链表)
查看>>
数据结构与算法-python实现顺序表
查看>>
Django REST framework仅需几步完成搭建api
查看>>
Django REST framework 中的权限认证
查看>>
采用实例演示Vue生命周期
查看>>
idea破解后无法打开的解决办法
查看>>
浅谈js中节点的浅拷贝和深拷贝
查看>>