c语言如何编写mysql客户端_【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysql客户端...
#include
#include
#include
#include
#include
#include
#include
#include "mydb.h"
void sqldb(const char *src)//参数src为要执行的SQL语句
{
if ((strncmp(src, "select", 6) == 0) || (strncmp(src, "SELECT", 6) == 0)
|| (strncmp(src, "show", 4) == 0) || (strncmp(src, "SHOW", 4) == 0)
|| (strncmp(src, "desc", 4) == 0) || (strncmp(src, "DESC", 4) == 0))
{
open_db(src);//如果src为有返回数据集SQL语句,那么调用open_db函数
} else
{
exec_db(src);//如果src为没有有返回数据集SQL语句,那么调用exec_db函数
}
}
void work(const char *userid, const char *password)
{
init_db();
if (conn_db("localhost", userid, password, "test") != 0)//连接到数据库
{
return;//连接数据库失败,函数退出
}
char buf[2048];
while (1)//循环从键盘读取
{
write(STDOUT_FILENO, "mysql1>", strlen("mysql1>"));//屏幕输出命令提示符mysql1>
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf));//等待用户从键盘输入
if (strncmp(buf, "quit", 4) == 0)
break;//用户输入quit,循环break;
sqldb(buf);
}
disconn_db();//断开数据库连接
}
struct termios oldterm;
void setstty()//设置输入退格键,不回显
{
//system("stty erase ^H");//执行shell命令,也可以 用来设置读取用户键盘输入的时候,退格键不回显
struct termios term;
if(tcgetattr(STDIN_FILENO, &term) == -1)//得到系统termion的设置
{
printf("tcgetattr error is %s\n", strerror(errno));
return;
}
oldterm = term;//保留当前termios设置,以便程序退出的时候可以恢复termios
/* term.c_lflag &= ~ICANON;//取消ICANON选项(不规范输入) term.c_lflag |= ICANON;//设置ICANON选项(规范输入) term.c_cc字段为要设置的具体特殊输入字符,如c_cc[VERASE]代表退格键, term.c_cc[VERASE] = '\b';意思为把退格键修改为'\b' VERASE代表向前擦出一个字符,VINTR代表发送ctrl + C中断信号,ctrl + c的ASCII码为3 例如:term.c_cc[VINTR] = '\t';意思为将tab键设置为终端信号 tcsetattr中,第二个参数说明,TCSAFLUSH:发送了所有输出后更改才生效,在更改发生时,未读取的所有输入数据都被删除 TCSANOW:更改立即生效 TCSADRAIN:发送了所有输出后更改才发生,如果更改输出参数则应该使用该选项 */
term.c_cc[VERASE] = '\b';//'\b'为退格键的ASCII码
if (tcsetattr(STDIN_FILENO, TCSANOW, &term) == -1)//设置系统termion
{
printf("tcsetattr error is %s\n", strerror(errno));
}
return;
}
void returnstty()//恢复系统的termios设置
{
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &oldterm) == -1)//设置系统termion
{
printf("tcsetattr error is %s\n", strerror(errno));
}
return;
}
int main(int arg, char *args[])
{
if (arg < 4)//如果没有参数,main函数退出
{
return EXIT_FAILURE;
}
if (strncmp(args[1], "-u", 2) != 0)//如果第二个参数不是-u,main函数退出
{
return EXIT_FAILURE;
}
if (strncmp(args[3], "-p", 2) != 0)//如果第四个参数不是-p,main函数退出
{
return EXIT_FAILURE;
}
const char *passwd = getpass("please input password:");//输入密码,屏幕不回显
setstty();//设置输入退格键,不回显
work(args[2], passwd);
returnstty();//恢复系统的termios设置
return EXIT_SUCCESS;
}
c语言如何编写mysql客户端_【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysql客户端...相关推荐
- MySQL入门_实战3_创建和删除数据库
MySQL入门_实战系列文章目录 MySQL入门_实战1 MYSQL安装和卸载 MySQL入门_实战2 MYSQL的登录和断开以及SQL查询常见问题 文章目录 MySQL入门_实战系列文章目录 前言 ...
- java要学mysql 吗_做JAVA开发需要把数据库学习到何种程度
原标题:做JAVA开发需要把数据库学习到何种程度 做JAVA开发需要把数据库学习到何种程度?智递科技小编和大家一起探讨交流: 1.开发人员对DB的掌握,越深入,你能做的事情就越多. 2.完成业务功能, ...
- 数据库mysql工序_网易杭研总结:数据库高可用技术之道(4)
数据库作为IT系统中最关键的服务之一,其可用性一直是系统设计中的重点考虑因素.同时,由于数据库有数据有状态的天性,数据库高可用有其天然的复杂性和难点,云原生架构下尤其如此,是一个值得深入探讨的课题.本 ...
- mysql语言的创建模式文件_南开17春学期《数据库应用系统设计》在线作业 免费答案...
17秋18春学期<数据库应用系统设计>在线作业 一.单选题(共 21 道试题,共 42 分.) 1. 在PowerScript语言中,要访问myobject对象中的name属性,正确的写法 ...
- postgresql 客户端_一款功能强大的数据库客户端:DataGrip
前言 在我们日常的程序开发中,很大一部分时间是在与数据库打交道. 查数据,导数据,检查SQL执行计划,优化SQL等,是我们数据库开发工作的重要组成部分,而且很多时候我们会使用到多款数据库,如Oracl ...
- golang mysql封装_自己封装的golang 操作数据库方法
这个是我用Go写的第一个东东,可能还存在些BUG没有测试到.这里主要是提供一个参考.各位可以改写成自己的风格. 在命令行下输入如下两条命令,进行安装 go get github.com/male110 ...
- c语言改变cmd 字体大小_嵌入式开发中常见3个的C语言技巧
原文:https://www.cnblogs.com/CrazyCatJack/p/6080266.html 1.指向函数的指针 指针不光能指向变量.字符串.数组,还能够指向函数.在C语言中允许将函数 ...
- 64位oracle客户端_开发小记-golang连接Oracle数据库配置
项目需求golang连接Orale数据库,使用mattn/go-oci8包,github地址 https://github.com/mattn/go-oci8 过程 Oracle Client和SDK ...
- jframe和mysql登陆_刚写的一个从数据库读取账户和密码进行登陆的小程序~高手请无~...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; impo ...
- springboot mysql事物_在Spring Boot中使用数据库事务
关于数据库访问还有一个核心操作那就是事务的处理了,前面两篇博客小伙伴们已经见识到Spring Boot带给我们的巨大便利了,其实不用猜,我们也知道Spring Boot在数据库事务处理问题上也给我们带 ...
最新文章
- 灰度图像--图像分割 Scharr算子
- ubuntu下使用串口调试终端minicom链接typec接口
- ReDim Preserve 的用途
- C#的加密解密算法,包括Silverlight的MD5算法
- python自动化从零开始_从零开始的自动化测试框架——Python篇
- USACO 1.1 Your Ride Is Here
- 使用Java API的5个技巧
- BZOJ 2460: [BeiJing2011]元素 线性基
- 学习微机原理与接口这一篇就够了
- SQL注入之注入检测总结
- ubuntu 20.04 不能鼠标双击打开 .desktop (桌面快捷方式图标)文件(双击变为使用文本编辑器打开)的解决办法
- AMiner会议论文推荐第三十二期
- 背包问题(动态规划 C/C++)
- CG-62 压电式雨量传感器 什么是压电式雨量传感器,压电雨量传感器和翻斗式雨量传感器优势对比
- 模板:旋转卡壳(计算几何)
- Java 文字转拼音工具类
- Linux 配置关掉虚拟防火墙
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
- Fantasy of a Summation(找规律,水)
- iOS开发技巧--iOS app 上架(2016年10月底)以及版本迭代上架
热门文章
- spring 整合quartz
- (JAVA)格式化输出日期
- oracle使用 union all 用自增序列_值得收藏的Oracle数据库性能优化
- 高一计算机网络技术应用计划,高一计算机网络应用基础教学计划
- 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁
- 【C++深度剖析教程11】C++学习之编写代码实现复数类
- Cocos2dx 3.11版本 视频添加跳过按钮
- 贝叶斯原理及其推断简介
- struts2 Eclipse 中集成strust2开发框架实例
- python的collection系列-默认字典(defaultdict)