mysql简单客户端程序的代码实现

//模拟mysql客户端程序的代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include"mysql.h"

int main()
{
	//mysql初始化
	//MYSQL *mysql_init(MYSQL* mysql)
	MYSQL *mysql = mysql_init(NULL);
	if(mysql == NULL)
	{
		printf("mysql init error\n");
	}
	printf("mysql init success\n");
	
	//连接mysql数据库
	//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 *conn = mysql_real_connect(mysql, "localhost", "root", "dexin", "mysql1", 0, NULL, 0); //端口写0时表示取默认值
	if(conn == NULL)
	{
		printf("mysql connect eror, [%s]\n", mysql_error(mysql));
	}
	printf("mysql connect succ\n");

	//获取当前使用的字符集,可发现此处用的是拉丁文(解决中文乱码问题)
	printf("before---%s---\n", mysql_character_set_name(conn));
	
	//设置默认使用的字符集
	mysql_set_character_set(conn, "utf8");

	//获取修改之后的字符集
	printf("after---%s---\n", mysql_character_set_name(conn));

	int ret;
	int i;
	char buf[1024];
	//循环等待用户输入
	while(1)
	{
		//打印提示符
		write(STDOUT_FILENO, "mysql> ", strlen("mysql> "));

		//接收用户输入
		memset(buf, 0x00, sizeof(buf));
		read(STDIN_FILENO, buf, sizeof(buf));

		//去掉回车键
		buf[strlen(buf)-1] = '\0';

		//若buf中包含分号,则去掉分号
		char *p = strrchr(buf, ':');
		if(p != NULL)
		{
			*p = '\0';
		}

		int len = strlen(buf);
		//过滤掉buf前面的空格
		for(i=0; i<len; i++)
		{
			if(buf[i]==' ')
				continue;
			else break;
		}

		memmove(buf, buf+i, len);

		printf("buf==[%s]\n", buf);

		//判断用户输入是否为exit或quit
		if(strncasecmp(buf, "exit", 4)==0 || strncasecmp(buf, "quit", 4)==0)
		{
			mysql_close(conn);
			exit(0);
		}

		//执行sql语句
		ret = mysql_query(conn, buf);
		if(ret != 0)
		{
			printf("%s\n",mysql_error(conn));
			continue;
		}

		//若用户输入的不是select语句,则打印影响行数
		if(strncasecmp(buf, "select", 6)!=0)
		{
			printf("Query OK, %d row affected\n", mysql_affected_rows(conn));
			continue;
		}

		//下面是select查询的情况
		
		//获取结果集
		MYSQL_RES *results = mysql_store_result(conn);
		if(results == NULL)
		{
			printf("mysql_store_result error, [%s]\n", mysql_error(mysql));
		}

		//获取列数
		//int num = mysql_num_fields(results); 两种皆可
		int num = mysql_field_count(conn);
	

		//获取表头(列名)信息
		MYSQL_FIELD *field = mysql_fetch_fields(results);
		if(field == NULL)
		{
			printf("mysql_fetch_fields error, [%s]\n", mysql_error(conn));
			mysql_free_result(results);
			continue;
		}

		//打印表头信息
		for(i=0; i<num; i++)
		{
			printf("%s ", field[i].name);
		}
		printf("\n");

		//循环获取每一条记录
		MYSQL_ROW row;
		while(row = mysql_fetch_row(results))
		{
			//printf("%s %s %s\n", row[0], row[1], row[2]);
			for(i=0; i<num; i++)
			{
				printf("%s ",row[i]);
			}
			printf("\n");
		}

		//释放结果集
		mysql_free_result(results);
	}

	//释放资源
	mysql_close(mysql);
	
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值