前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现一个简单的 mysql 工具

实现一个简单的 mysql 工具

作者头像
我与梦想有个约会
发布2023-10-20 18:21:54
2000
发布2023-10-20 18:21:54
举报
文章被收录于专栏:jiajia_dengjiajia_deng

无论在 windows 下还是 linux 下,我们每次去连接 mysql 的时候都会运行一个叫做 mysql 的命令,本文就模仿制作一个类似的程序,实现可以在里面执行 DML 和 DQL 语句。具体代码的实现请参考程序。


代码实现

代码语言:javascript
复制
#include <stdio.h>
#include <mysql.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char* argv[])
{
unsigned int err;
MYSQL* mysql;
// 初始化 mysql 句柄
mysql = mysql_init(NULL);
if (mysql == NULL)
{
err = mysql_errno(mysql);
printf(“mysql_init error, code = %d\n”, err);
return err;
}
// 连接服务器
mysql = mysql_real_connect(mysql, “127.0.0.1”, “root”, “******“, “mydb61”, 0, NULL, 0);
if (NULL == mysql)
{
err = mysql_errno(mysql);
printf(“mysql_real_connect error, code = %d\n”, err);
return err;
}
char sql[1024];
while (1)
{
printf(“mysql> “);
fgets(sql, sizeof(sql), stdin);
sql[strlen(sql) - 1] = ‘\0’;
// 判断是否是输入了退出指令
if (strcmp(sql, “EXIT”) == 0  strcmp(sql, “QUIT”) == 0
strcmp(sql, “exit”) == 0  strcmp(sql, “quit”) == 0)
{
break;
}
// 判断是否是执行了 select 或 show 或 desc 开头的命令
if (strncmp(sql, “SELECT”, 6) == 0  strncmp(sql, “select”, 6) == 0
strncmp(sql, “SHOW”, 4) == 0  strncmp(sql, “show”, 4) == 0
strncmp(sql, “DESC”, 4) == 0  strncmp(sql, “desc”, 4) == 0)
{
// 执行 sql 语句,如果要查询包含二进制数据的,要用 mysql_real_query
err = mysql_query(mysql, sql);
if (err != 0)
{
err = mysql_errno(mysql);
printf(“mysql_query error, code = %d\n”, err);
return err;
}
// 获取查询出来的数据有多少个列
unsigned int num, i = 0;
num = mysql_field_count(mysql);
// 获取结果集
MYSQL_RES* result;
result = mysql_store_result(mysql);
if (NULL == result)
{
err = mysql_errno(mysql);
printf(“mysql_query error, code = %d\n”, err);
return err;
}
/*
与 mysql_field_count() 功能一致,但 mysql_field_count() 是返回上一次执行语句(query)结果列的数目
而 mysql_num_fields() 是从结果集中获取返回列数
*/
// 获取表头内容
MYSQL_FIELD *fields;
fields = mysql_fetch_fields(result);
for(i = 0; i < num; i++)
{
   printf(“%8s\t”, fields[i].name);
}
putchar(10);
// 读取结果集
MYSQL_ROW row;
while ((row = mysql_fetch_row(result)))
{
for (i = 0; i < num; i++)
{
printf(“%8s\t”, row[i]);
}
putchar(10);
}
// 释放结果集
mysql_free_result(result);
}
else
{
// 执行 DQL 语句
err = mysql_query(mysql, sql);
if (err != 0)
{
err = mysql_errno(mysql);
printf(“mysql_query error, code = %d\n”, err);
return err;
}
my_ulonglong row = mysql_affected_rows(mysql);
printf(“Query OK, %d row affected”, row);
}
putchar(10);
}
// 关闭 mysql 句柄
mysql_close(mysql);
return 0;
}

编译程序

编译指令:gcc mysql_tool.c -o mysql_tool -I /usr/include/mysql -L /usr/lib64/mysql -l mysqlclient -l stdc++ -l pthread -l dl -l rt

执行效果

2015-07-27_220038
2015-07-27_220038

我们分别执行了两个 select 语句,可以正确的得到查询结果,并且执行了一个 update 语句,可以返回有多少行受影响了。这就是我们模仿的一个 mysql 客户端工具。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码实现
  • 编译程序
  • 执行效果
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档