/*

* Mysql的C语言接口

*实现电话本管理程序

*Lzy2011-7-17

*/

#include

#include

#include

#include

intmenu_main(void)

{

intnum;

printf("\n--------Phone book management--------\n");

printf(" 1.Show all contacts\n");

printf(" 2.Find a contact by name\n");

printf(" 3.Fuzzy search by name\n");

printf(" 4.Add new contact\n");

printf(" 0.Quit\n");

printf("\nInput > ");//打印命令提示符

fflush(stdout);

scanf("%d",&num);

returnnum;

}

intInitMysql(MYSQL*conn)

{

/*连接服务器*/

if(!(mysql_real_connect(conn,"localhost","root","","test",0,NULL,0)))

{

fprintf(stderr,"connect fail: %s\n",mysql_error(conn));

return-1;

}

if(mysql_query(conn,"use test;"))

{

fprintf(stderr,"%s\n",mysql_error(conn));

return-1;

}

if(mysql_query(conn,"create table if not exists celltable(id int primary key auto_increment, name char(10), telephone varchar(11));"))

{

fprintf(stderr,"%s\n",mysql_error(conn));

return-1;

}

return0;

}

/*

*显示所有联系人信息,返回数组地址保存手机ID号,用完之后需释放

*/

int*PlayAll(MYSQL*conn,char*arg)

{

if(mysql_query(conn,arg))

{

fprintf(stderr,"%s\n",mysql_error(conn));

returnNULL;

}

MYSQL_RES*res=mysql_store_result(conn);//查询结果

intcols=mysql_num_fields(res);//结果集中的列数

introws=mysql_num_rows(res);//结果集中的行数

MYSQL_ROW row;//声明1行数据的“类型安全”

if(rows==0)

returnNULL;

inti,flag=1,count=0;

int*num=(int*)malloc(4*rows);

printf("\n---Contact Information---\n");

printf("Name\tTell\n");

while((row=mysql_fetch_row(res))!=NULL)//输出全部信息

{

for(i=0;i

{

if(flag)

{

num[count]=atoi(row[0]);//每一条信息的编号

flag=0;

continue;

}

printf("%s\t",row[i]);

}

flag=1;

count++;

printf("\n");

}

mysql_free_result(res);//释放结果集分配的内存

returnnum;

}

/*

*修改数据库信息函数

*入口参数:conn->服务器句柄

*num ->数据库纪录编号

*/

intReInfor(MYSQL*conn,intnum)

{

charbuf[20],arg[100];

intchose;

printf("\nFunction: 1->ReName 2-> ReTelephone 3->delte: ");

getchar();

chose=getchar();

switch(chose)

{

case'1':

printf("Name: ");

getchar();

scanf("%s",buf);

sprintf(arg,"update celltable set name='%s' where id=%d;",buf,num);

if(mysql_query(conn,arg))

{

fprintf(stderr,"%s\n",mysql_error(conn));

return-1;

}

break;

case'2':

printf("Tell: ");

getchar();

scanf("%s",buf);

sprintf(arg,"update celltable set telephone='%s' where id=%d;",buf,num);

if(mysql_query(conn,arg))

{

fprintf(stderr,"%s\n",mysql_error(conn));

return-1;

}

break;

case'3':

sprintf(arg,"delete from celltablewhere id=%d;",buf,num);

if(mysql_query(conn,arg))

{

fprintf(stderr,"%s\n",mysql_error(conn));

return-1;

}

break;

default:

return0;

}

return0;

}

/*

*按名字查找联系人信息

*预处理方法进行查询修改信息

*/

intFindByName(MYSQL*conn)

{

charquery[50];

MYSQL_STMT*stmt=mysql_stmt_init(conn);//创建MYSQL_STMT句柄

strcpy(query,"select * from celltable where name=?;");

if(mysql_stmt_prepare(stmt,query,strlen(query)))

{

fprintf(stderr,"mysql_stmt_prepare: %s\n",mysql_error(conn));

return-1;

}

MYSQL_BIND ctos[1],stoc[3];

bzero(ctos,sizeof(ctos));

bzero(stoc,sizeof(stoc));

charname[20];

printf("Name: ");

scanf("%s",name);

ctos[0].buffer_type=MYSQL_TYPE_STRING;

ctos[0].buffer_length=strlen(name);

ctos[0].buffer=name;

if(mysql_stmt_bind_param(stmt,ctos))

{

fprintf(stderr,"mysql_stmt_bind_param: %s\n",mysql_error(conn));

return-1;

}

intid;

chartell[11];

stoc[0].buffer_type=MYSQL_TYPE_LONG;

stoc[0].buffer=&id;

stoc[1].buffer_type=MYSQL_TYPE_STRING;

stoc[1].buffer_length=sizeof(name);

stoc[1].buffer=name;

stoc[2].buffer_type=MYSQL_TYPE_STRING;

stoc[2].buffer_length=sizeof(tell);

stoc[2].buffer=tell;

if(mysql_stmt_bind_result(stmt,stoc))

{

fprintf(stderr,"mysql_stmt_bind_result: %s\n",mysql_error(conn));

return-1;

}

if(mysql_stmt_execute(stmt))

{

fprintf(stderr,"mysql_stmt_execute: %s\n",mysql_error(conn));

return-1;

}

if(mysql_stmt_store_result(stmt))

{

fprintf(stderr,"mysql_stmt_store_result: %s\n",mysql_error(conn));

return-1;

}

printf("\n---Contact Information---\n");

printf("Name\tTell\n");

while(mysql_stmt_fetch(stmt)==0)

printf("%s\t%s\n",name,tell);

ReInfor(conn,id);//修改信息

mysql_stmt_close(stmt);

return0;

}

/*

*按名字模糊查找 显示找到所有与关键字匹配的结果,如需修改结果中的信息,则输入Number

*/

intFindByLikeName(MYSQL*conn)

{

int*num;

charname[10];

chararg[100];

intn;

printf("Input Like: ");

getchar();

scanf("%s",name);

sprintf(arg,"select * from celltable where name like '%%%s%';",name);

num=PlayAll(conn,arg);

printf("Number: ");

getchar();

n=getchar();

if(n!='\n')

{

n=n-'0';

ReInfor(conn,num[n-1]);//修改信息

}

free(num);

return0;

}

/*

*新增联系人如果联系人存在,则修改此人信息

*/

intInputInfo(MYSQL*conn)

{

int*num;

charname[10],telephone[11];

charch;

chararg[100];

printf("Name: ");//输入姓名

scanf("%s",name);

sprintf(arg,"select * from celltable where name='%s';",name);

num=PlayAll(conn,arg);

if(num)

{

ReInfor(conn,num[0]);//修改信息

}

else

{

printf("telephone: ");//输入号码

scanf("%s",telephone);

printf("Save? y/n ");//是否保存

getchar();

scanf("%c",&ch);

if(ch=='y')

{

sprintf(arg,"insert into celltable(name, telephone) values('%s', '%s');",name,telephone);//生成命令

if(mysql_query(conn,arg))//插入数据库

{

fprintf(stderr,"%s\n",mysql_error(conn));

return-1;

}

num=PlayAll(conn,"select * from celltable;");//显示所有联系人

}

else

{

printf("save fail!\n");

return0;

}

}

free(num);

}

intmain(void)

{

int*num;

MYSQL*conn=mysql_init(NULL);//初始化服务器句柄;

InitMysql(conn);//连接服务器、创建数据库

while(1)

{

switch(menu_main())

{

case1:

num=PlayAll(conn,"select * from celltable;");//显示所有联系人

free(num);

break;

case2:

FindByName(conn);

break;

case3:

FindByLikeName(conn);

break;

case4:

InputInfo(conn);

break;

case0:

mysql_close(conn);

puts("Quit!\n");

return0;

default:

break;

}

}

return0;

}

c语言实现mysql通配符_Mysql的C语言接口简单实现电话本功能相关推荐

  1. c语言连接mysql(入门)_MySQL入门之C语言操作MySQL

    基本概念 C APIs包含在mysqlclient库文件当中,与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询.#include #include #include #include # ...

  2. mysql通配符_mysql通配符使用

    mysql通配符使用: w3cchool 在mysql查询中,经常会用到通配符,而且mysql的通配符和pgsql是有所不同的,甚至mysql中还可以使用正则表达式.本文就为大家带来mysql查询中通 ...

  3. mysql通配符_mysql通配符进行模糊查询

    在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...

  4. 易语言做mysql登录器_易语言制作数据库登录器 易语言数据库教程

    易语言做的登陆器怎样利用数据库验证密码是否正确? 你这么写当然是错误的.因为你用查找功能.只要数据库里有这个结果就返回真.搜索的是全部的记录,如果密码N个人是123456,那么只要用户名对密码肯定是正 ...

  5. 易语言执行mysql命令行_易语言教程之MySQL[3]执行SQL语句

    连接MySQL服务器后,接着就可以做点实际的操作了,比如读取记录,插入记录,修改记录等.操作MySQL有2种方法,本集讲的是第一种,适合懂MySQL语句的人,方便,学习成本低,效率高.但不懂MySQL ...

  6. 易语言做mysql登录器_易语言制作简单的一个登陆器

    1.新建一个Windows窗口程序 2.调整窗口大小并画上一些组件,如图. 3.将第二个编辑框的输入方式设置为密码输入. 4.复制下面代码,然后双击按钮,再粘贴上去. ================ ...

  7. r语言 清空mysql表_用R语言做数据清理(详细教程)

    数据的清理 如同列夫托尔斯泰所说的那样:"幸福的家庭都是相似的,不幸的家庭各有各的不幸",糟糕的恶心的数据各有各的糟糕之处,好的数据集都是相似的.一份好的,干净而整洁的数据至少包括 ...

  8. MySQL之DML(数据操纵语言)

    目录 一.简介 二.INSERT(插入) 2.1.插入单条记录(INSERT INTO VALUES) 2.2.插入单条记录(INSERT INTO SET) 2.3.插入多条记录(INSERT IN ...

  9. mysql通配符查询字段名_mysql通配符如何查询字段

    mysql通配符查询字段的方法:1.使用[%]表示任何字符出现任意次数,代码为[WHERE title like '%张三']:2.使用[_]表示单个字符,代码为[WHERE title like ' ...

  10. mysql通配符查询字段名_mysql通配符如何查询字段,

    mysql通配符如何查询字段如何用MySQL通配符查询字段,mysql通配符查询字段的方法:1.用[%]表示任意字符出现任意次数,代码为[类似"%张三"的WHERE标题]:2.用[ ...

最新文章

  1. 没人比程序猿更讨厌软件
  2. 求幂运算、多项式乘法及Horner法则的应用
  3. java 用来查找输出的函数_Solr复杂查询一:函数查询
  4. 1012 数字分类 (20 分)(C语言实现)
  5. keepalived+nginx保持高可用配置
  6. Linux Shell脚本入门教程系列之(九)Shell判断 if else 用法
  7. oracle 提示存在lob,Oracle数据库出现ORA-19566 LOB坏块的处理记录
  8. 数学思想 —— 对称性思维
  9. 使用维护Relationship
  10. 信息系统安全等级保护备案任务详单
  11. 详解大型分布式电商系统架构
  12. 周立功ZCANPRO基础使用教程
  13. 字节、十六进制字符串相互转换(asc2hex、hex2asc)
  14. 这是不是你想要的h5手机端弹窗
  15. html5橡皮擦,用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
  16. 日期类的实现(C++编写练习类与对象)
  17. SpringBoot 打成的 jar 包和普通的 jar 包有什么区别
  18. 【四】Java设计模式GOF23之抽象工厂模式
  19. Win10中解决Prolific PL2303出现错误代码10的问题
  20. Merlin部署KMS

热门文章

  1. 2020年中国SCADA行业产值、市场规模及竞争格局分析[图]
  2. MSP430F149让LED灯闪烁
  3. win7 删除网络计算机,win7系统修改和删除网络图标的方法
  4. 不打开Wifi获取Mac地址
  5. 【luminate primordial】苏州之行
  6. 考研英语语法_Day02_并列句
  7. 推荐阅读20100812
  8. 使用CM快速搭建CDH集群
  9. k8s之四层负载均衡Service:概念、原理解读
  10. 阿里视频云点播端体验Demo