C语言实现mysql客户端

运行环境:linux

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include "mysql.h"

int main()
{
	//初始化
	//MYSQL *mysql_init(MYSQL *mysql) 
	MYSQL *mysql = mysql_init(NULL);
	if(mysql==NULL)
	{
		printf("mysql init error\n");
		return -1;
	}
	printf("mysql init ok\n");

	//连接mysql数据库
	MYSQL *conn = mysql_real_connect(mysql, "localhost", "root", "123456", "mytest", 0, NULL, 0);
	if(conn==NULL)
	{
		printf("mysql_real_connect error,[%s]\n", mysql_error(mysql));
		return -1;
	}
	printf("connect mysql OK, [%p], [%p]\n", mysql, conn);

	char sSQL[255];
	MYSQL_RES *results;
	while(1)
	{
		write(STDOUT_FILENO,"mysql> ",strlen("mysql> "));
		//执行sql语句
		memset(sSQL,0,sizeof(sSQL));
		read(STDIN_FILENO,sSQL,sizeof(sSQL));

		//去分号,换行,空格
		char *p=strrchr(sSQL,';');
		if(p!=NULL)
		{
			*p='\0';
		}
		printf("%s\n",sSQL);

		if(sSQL[0]=='\n')
		{
			continue;
		}

		int j=0;
		int i=0;
		for(i=0;i<255;i++)
		{
			if(isspace(sSQL[i]))
			{
				j++;
				continue;
			}
			break;
		}
		strncpy(sSQL,sSQL+j,strlen(sSQL));


		if(strncasecmp(sSQL,"exit",4)==0 || strncasecmp(sSQL,"quit",4)==0)
		{
			exit(0);
		}
		int ret = mysql_query(conn, sSQL);
		if(ret!=0)
		{
			printf("mysql_query error, [%s]\n", mysql_error(mysql));
		}
		if(strncasecmp(sSQL,"select",6)!=0)
		{
			printf("Query OK,%ld row affected\n",(long)mysql_affected_rows(conn));
			continue;
		}


		//获取结果集
		//MYSQL_RES *mysql_store_result(MYSQL *mysql) 
		results = mysql_store_result(conn);
		if(results==NULL)
		{
			printf("mysql_store_result error,[%s]\n", mysql_error(mysql));
			continue;
		}


		//获取列数
		//	unsigned int mysql_num_fields(MYSQL_RES *result) 
		unsigned int num = mysql_num_fields(results);

		//获取表头信息---列名
		MYSQL_FIELD *fields = mysql_fetch_fields(results);
		if(fields==NULL)
		{
			printf("mysql_fetch_fields error,[%s]\n", mysql_error(mysql));
			mysql_free_result(results);
			continue;
		}
		//打印表头信息
		for(i=0; i<num; i++)
		{
			printf("%10s  ", fields[i].name);
		}
		printf("\n");

		//获取结果集中每一行记录
		//typedef char** MYSQL_ROW
		MYSQL_ROW row;
		while((row=mysql_fetch_row(results)))
		{
			for(i=0; i<num; i++)
			{
				printf("%10s  ", row[i]);	
			}
			printf("\n");
		}
		//释放结果集
		mysql_free_result(results);

	}


	//关闭数据库连接
	mysql_close(conn);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值