MYSQL常用的API接口

前言

访问MYSQL服务器,我们通常都是去使用musqlclient库,所以我们很有必要去了解一下这个库的作用,话不多说,我们直接开始来了解这个流程

初始化

MYSQL * mysql_init(MYSQL * mysql)
其中MYSQL是一个typedef的结构体,是一个很重要的操作,对系统的初始化,有这个才能对后面的进行操作

MYSQL *mysql mysql_init(NULL);
连接数据库,关闭数据库

他的结构原型,我们可以直接拿过来

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user,
 const char *passwd, const char *db, unsigned int port, const char 
 *unix_socket, unsigned long client_flag) 

我们可以大概看一下他的数据
mysql:前面init返回的结构体指针
host: 输入的地址,和本机连接的话就是hostlocal
use:登陆的用户名
passwd:登录密码
db:使用的数据库
port:端口,一般为0
unix_socket:网络套接字,一般为NULL;
client_flag:一般为0;

关闭连接的接口

mysql_close(mysql);
读取数据

函数原型

int mysql_query(MYSQL *mysql, const char *query);

mysql:结构体指针
query:执行的语句,一般使用数组
成功返回0,失败返回非零

获取结果集

我们一般使用是全部取出来这个函数

MTSQL_RES * mysql_store_result (MYSQL * mysql);

成功返回结果集,失败返回NULL
该函数调用成功,则SQL查询的结果被保存在result中,但我们不清楚有多少条数据。所以应使用游标的方式将结果集中的数据逐条取出

解析结果集

通过游标一行一行fetch结果集中的数据

获取结果集
MYSQL_ROW * mysql_fetch_row(MYSQL_RES * result);

成功返回结果集,失败返回NULL

获取行数

从结果集中解析有多少行

unsigned int mysql_num_fields (MYSQL_RES *res)

从mysql中句柄中解析有多少行

unsigned int mysql_field_count(MYSQL *mysql) 	
获取表头
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

我们可以看一下这个结构体一部分,其中就包含着我们需要的名字,只需要对他进行访问就好

typedef struct st_mysql_field {                                                             
 96   char *name;                 /* Name of column */
 97   char *org_name;             /* Original column name, if an alias */
 98   char *table;                /* Table of column if column was a field */
 99   char *org_table;            /* Org table name, if table was an alias */
100   char *db;                   /* Database for table */
101   char *catalog;          /* Catalog for table */
102   char *def;                  /* Default value (set by mysql_list_fields) */
}MYSQL_FIELD
一个简单的mysql终端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <mysql.h>
//初始化和连接函数
MYSQL * Mmysqlinit ()
{
	MYSQL *s =mysql_init (NULL);
	if (s==	NULL)
	{
		printf ("init %s\n",mysql_error(s));
		exit (-1);
	}
	s =mysql_real_connect(s,"localhost","root","wangdong","mysql",0,NULL,0);
	if (s==	NULL)
	{
		printf ("connect %s\n",mysql_error(s));
		exit (-1);
	}
	return s;
}

int main(int argc, char *argv[])
{
	MYSQL *s=Mmysqlinit();
	char buf[255];
	MYSQL_RES *res;
	while (1)
	{
		write(1,"SQL:",4);
		bzero(buf,sizeof(buf));
		read (0,buf,sizeof(buf));

		if (mysql_query(s,buf) !=0)
		{
			printf ("%s\n",mysql_error(s));
		}
		//如果是select语句的话就打印结果集,不是的话就简单执行
		if (strncmp(buf,"select",6)==0)
		{
			res=mysql_store_result(s);
			unsigned int num=mysql_num_fields(res);
			MYSQL_FIELD *fie =mysql_fetch_fields(res);
			for (int i=0;i<num;i++)
			{
				printf ("%s\t",fie[i].name);
			}
			printf ("\n");
			MYSQL_ROW row;
			while ((row=mysql_fetch_row(res)))
			{
				for (int i=0;i<num;i++)
					printf("%s\t",row[i]);
				printf("\n");
			}
		}
	}
	mysql_free_result(res);
	mysql_close (s);

	return 0;
}

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值