//头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <mysql/mysql.h>
#include <termios.h>#ifdef __cplusplus
extern "C"
{
#endif
//设置退格键不回显
int set_Backkey();//获取用户SQL语句,判断用户操作,不区分大小写
void read_user_print(MYSQL *pmysql,MYSQL *connection);#ifdef __cplusplus
}
#endif

//辅助方法实现
#include "pub.h"//设置退格键不回显
int set_Backkey()
{struct termios term;memset(&term, 0, sizeof(term));/*获取当前系统的termios设置*/if (tcgetattr(STDIN_FILENO, &term) == -1){printf("tcgetattr() failed! error message:%s\n", strerror(errno));return -1;}/*设置tremios的擦除字符功能为退格键*/term.c_cc[VERASE] = '\b';if (tcsetattr(STDIN_FILENO, TCSANOW, &term) == -1){printf("tcsetattr() failed! error message:%s\n", strerror(errno));return -1;}return 0;
}//获取用户SQL语句,判断用户操作,不区分大小写
void read_user_print(MYSQL *pmysql, MYSQL *connection)
{if (connection == NULL || pmysql == NULL){printf("read_user_print() params not correct!\n");return;}/*等待用户控制台输入*///获取数据库名称char buf_mysql[100] = { 0 };strcpy(buf_mysql, "mysql1>");int i = 0,j = 0;char temp_buf[1024] = { 0 };while (1){/*显示mysql1>*/write(STDOUT_FILENO, buf_mysql, sizeof(buf_mysql));/*等待用户输入*/char buf_read[1024] = { 0 };read(STDIN_FILENO, buf_read, sizeof(buf_read));/*执行用户SQL*//*判断用户输入的是查询操作,还是更新操作,* 更新操作有 update,delete,use,set,insert* 注意不区分大小写匹配* 将用户所有输入都转化为大写,遇到空格结束* */memset(temp_buf,0,sizeof(temp_buf));strcpy(temp_buf, buf_read);for (i=0; i < strlen(temp_buf); i++){//如果当前字符不是空格if (temp_buf[i] != ' '){if (temp_buf[i] > 96 && temp_buf[i] < 123){/*小写转化成大写*/temp_buf[i] = temp_buf[i] - 32;}} else{break;}}int flag = 0;if (strncmp(temp_buf, "UPDATE", 6) == 0){flag = 1;} else if (strncmp(temp_buf, "DELETE", 6) == 0){flag = 1;} else if (strncmp(temp_buf, "USE", 3) == 0){flag = 1;} else if (strncmp(temp_buf, "SET", 3) == 0){flag = 1;} else if (strncmp(temp_buf, "INSERT", 6) == 0){flag = 1;}//执行mysql_query()if (mysql_query(connection, buf_read) != 0){printf("SQL error:%s\n", mysql_error(pmysql));break;}if (flag){printf("SQL 更新成功!\n");} else{//执行查询语句MYSQL_RES *result = mysql_store_result(connection);if (result == NULL){printf("mysql_store_result() failed !\n");break;}MYSQL_ROW row;MYSQL_FIELD *field;/*展示列数据*/int numx = 0;while (1){field = mysql_fetch_field(result);if (field == NULL)break;printf("%s\t", field->name);numx++;}printf("\n");while (1){row = mysql_fetch_row(result);if (row == NULL)break;/*打印一行中每一列的数据*/for (j=0; j < numx; j++){printf("%s\t", row[j]);}/*每行换行*/printf("\n");}//释放查询结果集
            mysql_free_result(result);}printf("\n");}
}

//mysql客户端实现
#include "pub.h"int main(int arg, char *args[])
{//mysql -h 192.168.1.101 -u dbuser1 -pif (arg < 4){printf("please print three params!\n");return -1;}char hostname[100] = { 0 };char username[100] = { 0 };char passwd[100] = { 0 };//char dbname[100] = { 0 };if (strncmp(args[1], "-h", 2) == 0){strcpy(hostname, args[1]);strcpy(username, args[4]);} else if (strncmp(args[1], "-u", 2) == 0){strcpy(hostname, "localhost");strcpy(username, args[2]);} else{printf("error print!");return -1;}//获取密码strcpy(passwd, getpass("Enter password: "));//设置退格键不回显if (set_Backkey() < 0){printf("设置退格键不回显失败!\n");}//创建mysql connectionMYSQL mysql, *connection=NULL;//init mysqlmysql_init(&mysql);//connect mysql serverconnection = mysql_real_connect(&mysql, hostname, username, passwd, "", 0,0, 0);if (connection == NULL){printf("mysql_real_connect() failed ! error message:%s\n",mysql_error(&mysql));return -1;}/*用户输入*/read_user_print(&mysql,connection);//close sql server
    mysql_close(connection);return 0;
}

.SUFFIXES:.c .o
CC=gcc
SRCS=tec01.c\pub.c
OBJS=$(SRCS:.c=.o)
EXEC=runsqlstart:$(OBJS)$(CC) -o $(EXEC) $(OBJS) -lmysqlclient@echo "-------OK----------"
.c.o:$(CC) -Wall -g -o $@ -c $<
clean:rm -f $(OBJS)rm -f $(EXEC)

转载于:https://www.cnblogs.com/zhanggaofeng/p/6049268.html

数据库 数据库编程二相关推荐

  1. 【3-16】数据库基本编程语句,存储过程,触发器

    [3-16]数据库基本编程语句,存储过程,触发器 一基本编程语句 (1)定义变量  declare @变量名 数据类型 (2)赋值 set @变量名=值 select @变量名 =值 (3)取值打印 ...

  2. 电子商务之数据库分析(二)

    电子商务之数据库分析(二) 在分析数据库之前,我想倡导大家说说自己开发数据库时应用的工具,erwin?Powerdesiger?or Wrod?或者有更好的,我自己用的是Powerdesiger,但是 ...

  3. JSP贸易管理系统myeclipse开发mysql数据库struts编程java语言

    一.源码特点  JSP贸易管理系统 是一套完善的web设计系统,系统采用struts2框架进行开发一套源码,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库 系统主要采用B/S模 ...

  4. Oracle数据库基本操作(二) —— 视图、序列、索引、同义词

    一.视图(Views)与 同义词 1.视图:实际上是对查询结果集的封装,视图本身不存储任何数据,所有的数据都存放在原来的表中; 在逻辑上可以把视图看作是一张表 2.作用: 封装查询语句,简化复杂的查询 ...

  5. !!!. 数据库的编程(ADO) --- 三种sql语句执行的不同

    Description: 一. 数据库的编程(ADO)       要用ADO连接数据的头文件中加入    #import "c:\Program Files\Common Files\Sy ...

  6. 求不选修c语言课程的学生学号,数据库综合练习二.docx

    数据库综合练习二 一.选择题?1.对关系模型叙述错误的是____.A.建立在严格的数学理论.集合论和谓词演算公式的基础之上?B.微机DBMS绝大部分采取关系数据模型C.用二维表表示关系模型是其一大特点 ...

  7. 使用PowerDesigner做数据库设计(二)

    使用PowerDesigner做数据库设计(二) CDM设计后续 在上一篇文章中,有一点给忘记了,在CDM设计窗口中,如果在设计中,实体entity越来越多,实体entity间的关系也会越来越复杂,像 ...

  8. Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题

    Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题 多线程操作数据库,为处理并发问题,大家第一想到的是加锁操作 ,SQLite是文件级别的锁.SQLite3对于并发的处理机制是允 ...

  9. 数据库原理—数据库基础(二)

    数据库原理-数据库基础(二) 一.数据和信息 (一).信息 信息是客观存在的,是关于现实世界事物的存在方式或运动状态反映的综合 信息与材料和能源一个层次,是人类社会赖以生存和发展的三大资源之一 (二) ...

  10. Microsoft SQL Server 数据库使用(二)

    ##Microsoft SQL Server 数据库使用(二) 数据库练习使用可以在我的资源下载中下载数据库脚本文件. 一.查询数据 注:下面使用 Microsoft SQL Server 2019 ...

最新文章

  1. 交通优化需求下 智能交通已达千亿市场
  2. vue实现上下滑动翻页_基于vue实现上下滑动翻页效果
  3. 为什么Servlet程序的init(ServletConfig config)中需要调用父类的init方法
  4. c++别让异常逃离析构函数
  5. php验证数字100倍数,js如何实现一个文本框只能输入数字 且是100的倍数
  6. Python学习笔记_读Excel去重
  7. node JS 微信开发
  8. word文档相关使用
  9. hyper-v虚拟服务器内存满了,在Hyper-V Dynamic Memory里设置虚拟内存
  10. 西门子v90伺服说明书_干货 | 西门子1200与V90伺服PROFINET通信故障解决方法
  11. python-study-09
  12. C++ 一周刷完C++基础课程(同C程序进行比较)
  13. php拖拽上传大文件,如何实现文件拖拽上传
  14. 单片机之步进电机驱动篇(一)
  15. 淘宝京东苏宁易购:网商时代的角逐
  16. 【云原生】MYSQL语法总结
  17. 函数强凸 strong convexity
  18. 初识计算机程序ppt,初识计算机程序.ppt
  19. [linux虚拟机] 使用yum命令时,解析不了yum源,Cannot find a valid baseurl for repo: base/7/x86_6
  20. 四大检索工具 和 论文查找网址大全

热门文章

  1. 【opencv学习】【形态学】【腐蚀与膨胀】【开运算与闭运算】【礼帽和黑帽】
  2. leetcode 3 字符串
  3. 吴恩达深度学习 —— 4.2 深层网络中的前向传播
  4. 内联函数的意义和使用
  5. vue 项目中使用粘性布局不起作用_做vue项目中遇到的坑总结与学习
  6. ios并发会造成什么问题_痔疮会造成什么伤害?
  7. java高级考试题_JAVA高级考试题
  8. python字典弱引用_如何使用弱引用优化 Python 程序的内存占用?
  9. python单元测试mock_Python单元测试的Mock是怎么回事
  10. 多元样条函数及其应用_B样条算法(B-spline)