编写mysql的工具_实现一个简单的 mysql 工具

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

代码实现

#include

#include

#include

#include

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.png

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

相关

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值