一个简单用c和mysql的示范程序

标签: mysql 程序 | 发表时间:2012-11-07 22:51 | 作者:c_o_o_l_u_l_u
出处:http://blog.csdn.net
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
#include <signal.h>

#define  error(x) printf("ERROR %d: %s\n", mysql_errno(x), mysql_error(x))
#define SQL_LEN 256

/*
 * create table BEAL(
 * NAME CHAR(8) NOT NULL,
 * MONEY INTEGER NOT NULL,
 * DATE DATE NOT NULL,
 * TIME TIME NOT NULL
 * )
 */



MYSQL mysql;

void DEAL();
void insert(MYSQL *mysql);
void delete(MYSQL *mysql);
void show_user(MYSQL *mysql);
void show(MYSQL *mysql, char *name);
void help();
void bye();

void help()
{
        printf("\n------------------------------------------\n");
        printf("输入 0    : 显示用户\n");
        printf("输入 1    : 显示数据\n");
        printf("输入 2    : 插入数据\n");
        printf("输入 3    : 删除数据\n");
        printf("输入用户名: 显示改用户的数据\n");
        printf("Ctrl + C  : 退出\n");
        printf("------------------------------------------\n");

}

void bye()
{
        mysql_close(&mysql);
        printf("\nbye!\n");
        exit(0);
}

void insert(MYSQL *mysql)
{
        char sql[SQL_LEN];
        char name[8];
        float money;

        printf("插入格式: lulu 100\n");
        scanf("%s%f", name, &money);
        memset(sql, 0, SQL_LEN);
        sprintf(sql, "insert into DEAL values('%s', %f, curdate(), curtime())", name, money);
        printf("插入数据 [%s]\n", sql);

        if(mysql_real_query(mysql, sql, strlen(sql)))
        {
                error(mysql);
                return;
        }
}

void delete(MYSQL *mysql)
{
        char sql[SQL_LEN];
        char name[8];
        char date[16];
        char time[16];

        printf("删除格式: lulu 2012-11-06 09:45:10\n");
        scanf("%s%s%s", name, date, time);
        memset(sql, 0, SQL_LEN);
        sprintf(sql, "delete from DEAL where NAME = '%s' AND DATE = '%s' AND TIME = '%s'", name, date, time);

        printf("删除数据 [%s]\n", sql);

        if(mysql_real_query(mysql, sql, strlen(sql)))
        {
                error(mysql);
                return;
        }
}

void show(MYSQL *mysql, char *name)
{
        MYSQL_RES *res;
        MYSQL_ROW row;
        char sql[SQL_LEN];
        memset(sql, 0, SQL_LEN);
        if(name == NULL)
                sprintf(sql, "select * from DEAL");
        else
                sprintf(sql, "select * from DEAL where NAME = '%s'", name);
        printf("显示数据 [%s]\n", sql);

        if(mysql_real_query(mysql, sql, strlen(sql)))
        {
                error(mysql);
                return;
        }

        res = mysql_store_result(mysql);
        printf("+----------+------------+--------------+------------+\n");
        printf("|  %8s  |   %8s   |    %8s    |   %8s   |\n",  "用户", "金额", "日期", "时间");
        printf("+----------+------------+--------------+------------+\n");
        float sum = 0;
        while ((row = mysql_fetch_row(res)))
        {
                printf("|");
                int i;
                int num = mysql_num_fields(res);
                for(i = 0; i < num; i++)
                {
                        if(i == 1)
                                sum += atof(row[i]);
                        printf("%8s  |  ", row[i]);
                }
                printf("\n");
        }
        printf("+----------+------------+--------------+------------+\n");
        printf("%s 总金额: %.2f\n\n", (name == NULL ? "" : name), sum);
        mysql_free_result(res);
}

void show_user(MYSQL *mysql)
{
        MYSQL_RES *res;
        MYSQL_ROW row;
        char sql[SQL_LEN];
        memset(sql, 0, SQL_LEN);
                sprintf(sql, "select NAME from DEAL GROUP BY NAME");
        printf("显示数据 [%s]\n", sql);

        if(mysql_real_query(mysql, sql, strlen(sql)))
        {
                error(mysql);
                return;
        }

        res = mysql_store_result(mysql);
        printf("+----------+\n");
        printf("|  %8s  |\n",  "用户");
        printf("+----------+\n");
        float sum = 0;
        while ((row = mysql_fetch_row(res)))
        {
                printf("|");
                int i;
                int num = mysql_num_fields(res);
                for(i = 0; i < num; i++)
                {
                        if(i == 1)
                                sum += atof(row[i]);
                        printf("%8s  |  ", row[i]);
                }
                printf("\n");
        }
        printf("+----------+\n");
        mysql_free_result(res);
}

void DEAL()
{
        mysql_init(&mysql);
        if(!mysql_real_connect(&mysql, 
                                "localhost", "coolulu", "猜猜看", "BANK", 0, NULL, 0))
                error(&mysql);
        else
                printf("success connect...\n");
        help();
        char name[8];

        while(1)
        {
                printf("$ 输入数字或用户名:");
                scanf("%s", name);

                switch(name[0])
                {
                case '0':
                        show_user(&mysql);break;
                case '1':
                        show(&mysql, NULL);break;
                case '2':
                        insert(&mysql);break;
                case '3':
                        delete(&mysql);break;
                default:
                        show(&mysql, name);
                }

                memset(name, 0, strlen(name));
        }
}

int main()
{
        signal(SIGINT, bye);
        DEAL();
        return 0;
}



  1. /*
  2.  * create table BEAL( 
  3.  * NAME CHAR(8) NOT NULL, 
  4.  * MONEY INTEGER NOT NULL, 
  5.  * DATE DATE NOT NULL, 
  6.  * TIME TIME NOT NULL 
  7.  * ) 
  8.  */ 


coolulu@ubuntu:~/code/mysql/BANK$ cat makefile
deal:
        gcc -o deal deal.c `mysql_config --cflags --libs`
clean:
        rm deal


作者:c_o_o_l_u_l_u 发表于2012-11-7 22:51:10 原文链接
阅读:11 评论:0 查看评论

相关 [mysql 程序] 推荐:

一个简单用c和mysql的示范程序

- - CSDN博客推荐文章
MYSQL mysql; void DEAL(); void insert(MYSQL *mysql); void delete(MYSQL *mysql); void show_user(MYSQL *mysql); void show(MYSQL *mysql, char *name); void help(); void bye(); void help() {.

PHP程序员最常犯的11个MySQL错误

- - 外刊IT评论
对于大多数web应用来说,数据库都是一个十分基础性的部分. 如果你在使用 PHP,那么你很可能也在使用 MySQL—LAMP系列中举足轻重的一份子. 对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码. 但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能. 下面列举了我曾经犯过的最严重的11个MySQL相关的错误(有些同样也反映在其他语言/数据库的使用上).

安装MySQL中间层 Atlas实现不改程序就能读写分离

- - C1G军火库
Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目. 它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性. 目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条.

将 PHP 应用程序从 MySQL 移动到 DB2,第 1 部分: 为您的迁移做好准备

- robin - IBM developerWorks 中国 : 文档库
了解为何将 PHP 应用程序迁移到 DB2(R),如何计划迁移,如何执行,如何支持,如何根据 IBM intranet 应用程序案例研究的经验处理潜在风险. 这个 4 部分的系列文章分享了成功的关键任务型 PHP intranet 应用程序从 MySQL 迁移到 DB2 的经验,这个案例被 IBM 全球 4,000 名用户使用,支持 ibm.com 内容生产.

基于MySQL的高可用可扩展架构探讨-原文已发表于《程序员》

- - Sky.Jian 朝阳的天空
注:原文已发表于《程序员》杂志关系型数据库60周年特刊. 随着信息量飞涨,信息的存储成为了这个时代至关重要的一项技术. 如何来保证数据存储技术能够适应信息量的增长速度和我们对信息的高度依赖,成为一个非常重要的课题. 本文将从数据库架构的层面,通过以开源的数据存储软件来构建分布式数据层的思路,期望实现一个低成本的高可用可扩展的数据层架构.

监听mysql的binlog日志工具分析:canal、Maxwell、Databus、DTS - 程序员大本营

- -
阿里云的数据传输服务DTS. 定位:基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议. mysql master收到dump请求,开始推送binary log给slave(也就是canal).

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.

MySQL Replication 线程

- - CSDN博客推荐文章
Replication 线程. Mysql 的Replication 是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之Slave). 在Master 与Slave 之间的实现整个复制过程主. 要由三个线程来完成,其中两个线程(Sql 线程和IO 线程)在Slave 端,另外一个线程(IO 线程)在Master 端.

mysql backup 脚本

- - ITeye博客
网上备份脚本很多,但考虑都不周全. 保证创建备份文件只能是创建者跟root可以访问,其他用户没有权限,保证了数据库备份的安全. 上面脚本是负责备份的份数管理,. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Oracle MySQL Or NoSQL续

- - Sky.Jian 朝阳的天空
接前面一篇,这里再将之前在“中国系统架构师大会”5周年的时候发布的纪念册“IT架构实录”上的一篇文章发出来,也算是前面博文中PPT的一个文字版解读吧. Oracle,MySQL 还是 NoSQL. 随着阿里系的“去IOE”运动在社区的宣传声越来越大,国内正在掀起一股“去xxx”的技术潮. 不仅仅是互联网企业,包括运营商以及金融机构都已经开始加入到这个潮流之中.