设为首页 收藏本站
查看: 1221|回复: 0

[经验分享] c 连接Mysql数据库

[复制链接]

尚未签到

发表于 2016-9-11 09:41:08 | 显示全部楼层 |阅读模式
  MysqlConnect.h
  

/********************************************************************
** 文件名:MysqlConnect.h
** 创建人:ss
** 完成日期:2010-12-08
********************************************************************/
#ifndef MYSQL_CONNECT_H
#define MYSQL_CONNECT_H
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <mysql/mysql.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <malloc.h>

typedef struct MysqlConnect MysqlConnect;
typedef void *(*query_handler)(MYSQL_ROW);  
struct MysqlConnect
{
int (*connect)(MysqlConnect *this);
int (*query)(MysqlConnect *this,char *query,query_handler);
int (*execute)(MysqlConnect *this,char *query);
int (*close)(MysqlConnect *this);
void (*destory)(MysqlConnect *this);
};
MysqlConnect* MysqlConnect_create(char *host,char *user_name,char *password,char *datebase,unsigned short port);
#endif
  MysqlConnect.c
  

#include "MysqlConnect.h"
typedef struct private_MysqlConnect private_MysqlConnect;
//私有结构体
struct private_MysqlConnect
{
MysqlConnect public;
MYSQL mysql;     
MYSQL_RES *result;
MYSQL_ROW row;
char host_name[100];
char user_name[50];
char password[50];
char database[100];
unsigned short port;
};
//回调函数--用户接口,用来对查询出来的数据进行处理
void* handler(MYSQL_ROW row)
{
printf("%s\n",row[1]);
return NULL;
}
//连接数据库
int MysqlConnect_connect(private_MysqlConnect *this)
{
if(mysql_real_connect(&this->mysql,this->host_name,this->user_name,this->password,this->database,this->port,NULL,0))
{  
// mysql_set_character_set(&this->mysql,"utf8");
printf("success\n");
return 1;
}   
else
{
printf("connect error");
return 0;
}
}
//查询数据库
int MysqlConnect_query(private_MysqlConnect *this,char *query,query_handler  handler)
{
if(mysql_real_query(&this->mysql,query,strlen(query))==0)
{
this->result = mysql_store_result(&this->mysql);
while((this->row = mysql_fetch_row(this->result))!=NULL)
{
handler(this->row);
}
mysql_free_result(this->result);
}
else
{
printf("query error!\n");
return 0;
}   
return 0;
}
//操作数据库
int MysqlConnect_execute(private_MysqlConnect *this,char *query)
{
if(mysql_real_query(&this->mysql,query,strlen(query))==0)
{
return 1;
}
else
{
printf("query error!\n");
return 0;
}   
}
//关闭连接
int MysqlConnect_close(private_MysqlConnect *this)
{
mysql_close(&this->mysql);
}
//销毁连接
void MysqlConnect_destory(private_MysqlConnect *this)
{
free(this);
}
//初始化
MysqlConnect* MysqlConnect_create(char *host,char *user_name,char *password,char *database,unsigned short port)
{
private_MysqlConnect *this=malloc(sizeof(private_MysqlConnect));
strcpy(this->user_name,user_name);
strcpy(this->password,password);
strcpy(this->host_name,host);
strcpy(this->database,database);
this->port=port;
this->public.connect=(int (*)(MysqlConnect *))MysqlConnect_connect;
this->public.query=(int (*)(MysqlConnect *,char *,query_handler ))MysqlConnect_query;
this->public.execute=(int (*)(MysqlConnect *,char *))MysqlConnect_execute;
this->public.close=(int (*)(MysqlConnect *))MysqlConnect_close;
this->public.destory=(void (*)(MysqlConnect *))MysqlConnect_destory;
return (MysqlConnect *)this;
}

int main()
{
//设置MYSQL数据库连接参数
/*数据库所在主机ip,用户名,密码,登陆的数据库,端口(默认3306)*/
MysqlConnect *conn=MysqlConnect_create("127.0.0.1","name","password","database",3306);

//建立数据库连接
conn->connect(conn);
//操作数据库----做update,add 操作使用
conn->execute(conn,"insert into key_word values(null,'ss','ssss',1,now())");
//关闭数据库
conn->close(conn);

//连接数据库
conn->connect(conn);
//查询数据库
conn->query(conn,"select * from key_word",(query_handler)handler);
//关闭数据库
conn->close(conn);
//回收资源
conn->destory(conn);
}
  
  makefile
  

MysqlConnect:MysqlConnect.o
gcc -g -o MysqlConnect MysqlConnect.o -I/include/mysql -L/lib/mysql -lmysqlclient -lz
MysqlConnect.o:MysqlConnect.c MysqlConnect.h
gcc -g -c  MysqlConnect.c
clean:
rm *.o

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-270635-1-1.html 上篇帖子: MySQL常用维护管理工具 下篇帖子: windows下编译调试mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表