数据库 --> MySQL使用
MySQL使用
代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> //write头文件
#include <mysql/mysql.h>//包含MySQL头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void connect_mysql(MYSQL * mysql ,char * str[],MYSQL **connect);
void insert_mysql(MYSQL * mysql);
void delete_mysql(MYSQL * mysql);
void update_mysql(MYSQL * mysql);
void select_mysql(MYSQL * mysql,MYSQL **connect);
void show_table(MYSQL * mysql,MYSQL **connect);
void set_char(MYSQL * mysql);
void menu();
void quit(MYSQL **connect);
int main(int argc,char *argv[])
{
MYSQL mysql, *connect = NULL; char *str[] = {argv[],argv[],argv[]};
connect_mysql(&mysql,str,&connect);
menu();
quit(&connect);
return ;
}
void set_char(MYSQL *mysql)//设置数据库的字符集 要先做
{
int i = mysql_query(mysql,"set names utf8");//向mysql服务器端发送指令
//成功则返回0,失败则返回非0数据
if(i != )
{
printf("set char fail!!\n");
return;
} }
void select_mysql(MYSQL *mysql,MYSQL **connect)
{
if(!mysql)
return;
else{
write(,"Input select SQL:\n",strlen("Input select SQL:\n"));
char select_sql[];
int n=;
memset(select_sql,,sizeof(select_sql));
for(n;;n++)//读取标准输入直到;在去除;
{
select_sql[n]=getchar();
if(select_sql[n] == ';')
{
select_sql[n]=;
break;
}
}
char * SQL = select_sql;
int i = mysql_query(mysql,SQL);
if(i != )
{
printf("Update SQL fail %s \n",mysql_error(mysql));
return;
}else
printf("Update SQL success\n");
}
MYSQL_RES *res = mysql_store_result(mysql);//返回结果集放入MYSQL_RES中
int num_fields = mysql_num_fields(res);//查看结果集中行数 MYSQL_ROW row;
while((row = mysql_fetch_row(res)))//检索一个结果集合的下一行。当在mysql_store_result()之后使用时,
//没有更多的行可检索时,mysql_etch_row()返回NULL
{
int i;
for(i=;i<num_fields;i++)
{
printf("%s\n",row[i]); } }
mysql_free_result(res);//必须清空结果集########
} void show_table(MYSQL *mysql,MYSQL **connect)
{
int i = mysql_query(mysql,"show tables");
if(i != )
return;
else{
MYSQL_RES * result = mysql_store_result(*connect);
int num_fields = mysql_num_fields(result);
MYSQL_ROW row;
while((row = mysql_fetch_row(result)))
{
int i;
for(i=;i<num_fields;i++)
{
char *SQL;
sprintf(SQL,"desc %s",row[i]);
int n = mysql_query(mysql,SQL);
MYSQL_RES * res= mysql_store_result(*connect);
//可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()
//和mysql_row_tell()来获取或设置结果集中的当前行位置。
//一旦完成了对结果集的操作,必须调用mysql_free_result()。
int table_num = mysql_num_fields(res);
MYSQL_ROW row1;
while((row1 = mysql_fetch_row(res)))
{
int j;
for(j=;j<table_num;j++)
{
printf("%s\n",row1[j]); }
}
mysql_free_result(res); } }
mysql_free_result(result);
} } void update_mysql(MYSQL *mysql)
{
if(!mysql)
return;
else{
write(,"Input update SQL:\n",strlen("Input update SQL:\n"));
char update_sql[];
int n=;
memset(update_sql,,sizeof(update_sql));
for(n;;n++)
{
update_sql[n]=getchar();
if(update_sql[n] == ';')
{
update_sql[n]=;
break;
}
}
char * SQL = update_sql;
int i = mysql_query(mysql,SQL);
if(i != )
{
printf("Update SQL fail %s \n",mysql_error(mysql));
return;
}else
printf("Update SQL success\n");
}
} void delete_mysql(MYSQL *mysql)
{
if(!mysql)
return;
else{
write(,"Input delete SQL:\n",strlen("Input delete SQL:\n"));
char delete_sql[];
int n=;
memset(delete_sql,,sizeof(delete_sql));
for(n;;n++)
{
delete_sql[n]=getchar();
if(delete_sql[n] == ';')
{
delete_sql[n]=;
break;
}
}
char * SQL = delete_sql;
int i = mysql_query(mysql,SQL);
if(i != )
{
printf("Delete SQL fail %s \n",mysql_error(mysql));
return;
}else
printf("Delete SQL success\n");
}
} void insert_mysql(MYSQL *mysql)
{
if(!mysql)
return;
else{
write(,"Input insert SQL:\n",strlen("Input insert SQL:\n"));
char insert_sql[];
int n=;
memset(insert_sql,,sizeof(insert_sql));
for(n;;n++)
{
insert_sql[n]=getchar();
if(insert_sql[n] == ';')
{
insert_sql[n]=;
break;
}
}
char * SQL = insert_sql;
int i = mysql_query(mysql,SQL);
if(i != )
{
printf("Insert SQL fail %s \n",mysql_error(mysql));
return;
}else
printf("Insert SQL success\n");
}
}
void connect_mysql(MYSQL *mysql,char *str[],MYSQL **connect)
{
char passwd[];
memset(passwd,,sizeof(passwd));
write(,"passwd:",strlen("passwd:"));
scanf("%s",passwd);
passwd[strlen(passwd)]=;
mysql_init(mysql);
*connect = mysql_real_connect(mysql,str[],str[],passwd,str[],,,);
if(*connect == NULL)
{
printf("Connect database fail! %s\n",mysql_error(mysql));
return;
}else{
printf("Connect success!\n");
} }
void quit(MYSQL **connect)
{
mysql_close(*connect);
*connect = NULL;
printf("Bye\n");
exit();
}
void menu()
{
printf("###########################\n");
printf(" A -> SELECT:\n");
printf(" B -> UPDATE:\n");
printf(" C -> DELETE:\n");
printf(" D -> INSERT:\n");
printf(" E -> DESC TABLE:\n");
printf(" Q -> QUIT:\n");
printf("###########################\n");
write(,"Input: ",strlen("Input: "));
}
1、找不到mysql.h,请安装
sudo apt-get install libmysqlclient-dev
2、编译不过,加 -lmysqlclient
参考:http://www.oschina.net/code/snippet_2325404_47438
数据库 --> MySQL使用的更多相关文章
- MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> insert into mysql.user(Host,User,Pas ...
- Robot Framework-DatabaseLibrary数据库(MySql)
Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...
- paip.导入数据英文音标到数据库mysql为空的问题之道解决原理
paip.导入数据英文音标到数据库mysql为空的问题之道解决原理 #---原因:mysql 导入工具的bug #---解决:使用双引号不个音标括起来. 作者 老哇的爪子 Attilax 艾龙, E ...
- paip.解决 数据库mysql增加列 字段很慢添加字段很慢
paip.解决 数据库mysql增加列 字段很慢添加字段很慢 #环境如下: mysql5.6 数据仅仅3w alter table xxx add column yyy int default ...
- Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递
http://niuzhenxin.iteye.com/blog/1706203 Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql.. ...
- 数据库MySQL多个数据库服务冲突
一.目标名称 MySQL 二.目标版本 mysql-5.6.24-win32.1432006610.zip 三.环境信息 系统:windows 7 旗舰版 防火墙:关闭 —— 注意:如果防火墙不关闭 ...
- paip.将数据导入到在英语语音数据库mysql道路解决空原则问题
paip.将数据导入到在英语语音数据库mysql道路解决空原则问题 #---原因:mysql 导入工具bug #---解决:不要使用双引号括注音. 笔者 老哇爪 Attilax 艾龙. EMAIL: ...
- Yii Framework2.0开发教程(5)数据库mysql性能
继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了 ...
- cpanel导入大数据库(mysql)的方法
phpmyadmin是一件很方便的在线管理MySQL数据库的工具,但对于较大的数据库的导出和导入却很容易出错.特别是导入工作,通常5M已经是它的极限了.这里,主要介绍一下如何通过cPanel导入大型的 ...
- 前端学习数据库MYSQL
这篇文章主要写了 1.数据库MYSQL 2.基本上会遇到的所有SQL语句 数据库可视化软件------Navicat 数据库里边存放的是表,表与表之间是有关联的,而且可以对表进行相关操作(增,删,改, ...
随机推荐
- MinGW下简单编译FFmpeg
2009.03.21补充:ffmpeg-0.5正式发布,地址为:[url]http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2[/url].修改了第7步, ...
- SQL注入攻击三部曲之入门篇
SQL注入攻击三部曲之入门篇 服务器安全管理员和攻击者的战争仿佛永远没有停止的时候,针对国内网站的ASP架构的SQL注入攻击又开始大行其道.本篇文章通过SQL注入攻击原理引出SQL注入攻击的实施方法, ...
- DML 触发器2
2.行级触发器的关联标识符 :new,:old >>1. 一般通过:new.filed 引用(filed是trigger_table的字段名) :new :old中filed字段的意义 触 ...
- linux c语言 select函数用法
linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unis ...
- (二十)java小练习二
练习4:定义一个整数数组,编写程序求出一个数组的基数和偶数个数 package demo; /* * 定义一个整数数组,编写程序求出一个数组的基数和偶数个数 */ public class Tes ...
- 页面某些特定图标的权限,比如导入导出表格,下载等等,这个权限必须在有某个页面查看的权利的基础上(细粒度)(shiro项目中来的四)
一,查找按钮权限的设置 第一步:会根据用户的相关信息去查到它的角色表: SELECT * FROM SYS_USER WHERE user_id='eded77bdf35347249b2bacfa18 ...
- 【原】spring boot添加cros全局过滤器
新增一个过滤器类并实现filter接口 public class CorsFilter implements Filter { final static org.slf4j.Logger logger ...
- JQuery移动动画实现点击按钮切换图片--JQuery基础
直接贴源码了哈,这些都是自己总结的……汗水几何?希望能帮到大家. <%@ Page Language="C#" AutoEventWireup="true" ...
- RobotFramework下HttpLibrary库其它关键字
关键字 使用描述 DELETE 向服务器端发送http delete请求,该请求接收一个参数[ url ],请求的方式和post请求非常类似,示例: DELETE /_utils/config.htm ...
- Python Cookbook(第3版)中文版:15.18 传递已打开的文件给C扩展
15.18 传递已打开的文件给C扩展¶ 问题¶ 你在Python中有一个打开的文件对象,但是需要将它传给要使用这个文件的C扩展. 解决方案¶ 要将一个文件转换为一个整型的文件描述符,使用 PyFile ...