一个简单的mysql与C的交互,使用了一些mysql的C API!

老鸟掠过,新手能够看看!

/******************************************
本文件学习mysql的database使用
学习mysql的C接口
包括初始化db,检查数据库是否存在,不存在就创建。
检查表是否存在,不存在则创建
*****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //须要包括mysql的头文件,/usr/include/mysql/
//编译的时候须要加上-L/usr/lib/ -lmysqlclient -I/usr/include/mysql选项 #include <mysql.h> //主要的头文件,一些重要结构体的声明
#include <errmsg.h>//错误信息的存放
#include <mysql_version.h> //包括当前mysql的版本号信息
//////////////////所有变量,宏定义//////////////////////
#define DEBUG
#define SERVER_HOST "localhost" //mysql的远程地址
#define SERVER_USER "root" //数据库登录名
#define SERVER_PWD "123" //数据库登录password #define DB_NAME "tmp_db" //新建数据库的名字
#define TABLE_NAME "mytables" //库中的表 int check_tbl(MYSQL* mysql,char *name);
int check_db(MYSQL *mysql,char *db_name); int init_db()
{ int err=0;
MYSQL mysql; if(!mysql_init(&mysql)){
perror("mysql_init:");
exit(1);
} if(!mysql_real_connect(&mysql,SERVER_HOST,SERVER_USER,SERVER_PWD,NULL,0,NULL,0))
{
perror("mysql_real_connect");
exit(1);
}
printf("connected.....\n"); err = check_db(&mysql,DB_NAME);
if(err != 0)
{
printf("create db is err!\n");
mysql_close(&mysql);
exit(1);
}
//select which db
if(mysql_select_db(&mysql,DB_NAME)) //return 0 is success ,!0 is err
{
perror("mysql_select_db:");
mysql_close(&mysql);
exit(1);
}
//chuangjianbiao
if((err=check_tbl(&mysql,TABLE_NAME))!=0)
{
printf("check_tbl is err!\n");
mysql_close(&mysql);
exit(1);
}
mysql_close(&mysql);
return 0;
} int check_db(MYSQL *mysql,char *db_name)
{
MYSQL_ROW row = NULL;
MYSQL_RES *res = NULL; res = mysql_list_dbs(mysql,NULL);
if(res)
{
while((row = mysql_fetch_row(res))!=NULL)
{
printf("db is %s\n",row[0]);
if(strcmp(row[0],db_name)==0)
{
printf("find db %s\n",db_name);
break;
}
}
//mysql_list_dbs会分配内存,须要使用mysql_free_result释放
mysql_free_result(res);
}
if(!row) //没有这个数据库,则建立
{
char buf[128]={0};
strcpy(buf,"CREATE DATABASE ");
strcat(buf,db_name);
#ifdef DEBUG
printf("%s\n",buf);
#endif
if(mysql_query(mysql,buf)){
fprintf(stderr,"Query failed (%s)\n",mysql_error(mysql));
exit(1);
}
}
return 0;
} int check_tbl(MYSQL* mysql,char *name)
{
if(name == NULL)
return 0;
MYSQL_ROW row=NULL;
MYSQL_RES *res = NULL;
res = mysql_list_tables(mysql,NULL);
if(res)
{
while((row = mysql_fetch_row(res))!=NULL)
{
printf("tables is %s\n",row[0]);
if(strcmp(row[0],name) == 0)
{
printf("find the table !\n");
break;
}
}
mysql_free_result(res);
}
if(!row) //create table
{
char buf[128]={0};
char qbuf[128]={0};
snprintf(buf,sizeof(buf),"%s (name VARCHAR(20),sex char(1),score int(3));",TABLE_NAME);
strcpy(qbuf,"CREATE TABLE ");
strcat(qbuf,buf);
//#ifdef DEBUG
printf("%s\n",qbuf);
//#endif
if(mysql_query(mysql,qbuf)){
fprintf(stderr,"Query failed (%s)\n",mysql_error(mysql));
exit(1);
}
}
return 0;
} int main()
{
int err=0;
err = init_db(); return 0;
}

编译的方法:最后的-I一定要注意检查这个文件夹是不是存在,否则会报错

gcc -o mysql mysql.c -L/usr/lib/ -lmysqlclient -I/usr/include/mysql

报错:

root@jack-desktop:~# gcc -o mysql mysql.c -L/usr/lib/ -lmysqlclient
gcc: mysql.c: 没有那个文件或文件夹
root@jack-desktop:~#
root@jack-desktop:~#
root@jack-desktop:~# cd myc/
root@jack-desktop:myc# gcc -o mysql mysql.c -L/usr/lib/ -lmysqlclient
mysql.c:15:73: error: mysql.h: 没有那个文件或文件夹
mysql.c:16:43: error: errmsg.h: 没有那个文件或文件夹
mysql.c:17:63: error: mysql_version.h: 没有那个文件或文件夹
mysql.c:27: error: expected ‘)’ before ‘*’ token
mysql.c:28: error: expected ‘)’ before ‘*’ token
mysql.c: In function ‘init_db’:
mysql.c:34: error: ‘MYSQL’ undeclared (first use in this function)
mysql.c:34: error: (Each undeclared identifier is reported only once
mysql.c:34: error: for each function it appears in.)
mysql.c:34: error: expected ‘;’ before ‘mysql’
mysql.c:36: error: ‘mysql’ undeclared (first use in this function)
mysql.c: At top level:
mysql.c:73: error: expected ‘)’ before ‘*’ token
mysql.c:109: error: expected ‘)’ before ‘*’ token

mysql基础:mysql与C结合实例的更多相关文章

  1. MySQL基础 - mysql命令行客户端

    在Linux系统当中,mysql作为一个客户端命令程序,在很大程度上连接数据库都是使用mysql,因此很有必要熟悉mysql命令行的使用. 这里假设数据库用户为icebug,密码为icebug_pas ...

  2. MySQL基础、索引、查询优化等考察点

    MySQL基础 MySQL数据类型 整数类型 TINYINT. SMALLINT. MEDIUMINT. INT. BIGINT 属性:UNSIGNED 长度:可以为整数类型指定宽度,例如:INT(1 ...

  3. 【摘】Mysql备份还原数据库之mysqldump实例及参数详细说明

    原文http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html   我们在运营项目的过程中肯定会遇到备份数据库,还原数据库的情况,我们一 ...

  4. Mysql备份还原数据库之mysqldump实例及参数详细说明

    [root@localhost myexport]# mysqldump -h211.100.75.204 -uroot -p@^#coopen -P5029 --single-transaction ...

  5. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  6. MySQL基础操作命令

    MySQL基础操作命令 1. 查看MySQL进程 ps -ef|grep mysql |grep -v grep 2. 查看MySQL端口 ss -lnt | grep 3306 3. MySQL的启 ...

  7. python【第十二篇】Mysql基础

    内容: 1.数据库介绍及MySQL简介 2.MySQL基本操作 1 数据库介绍 1.1什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同 ...

  8. MYSQL:基础—存储过程

    MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...

  9. 【运维工程师必知必会】——MySql基础

    一.SQL语句 1.分类 DDL(data definition language)数据定义语言(create.alter.drop),管理基础数据.例如:库.表     #运维要熟练,开发也要熟练 ...

  10. mysql、mariadb安装和多实例配置

    本文目录:1. mysql单实例安装 1.1 rpm安装mysql 1.2 通用二进制包安装mysql 1.2.1 初始化数据库 1.2.2 安装后的规范化操作 1.3 编译安装 1.3.1 编译安装 ...

随机推荐

  1. fourinone分布式缓存研究和Redis分布式缓存研究

    最近在写一个天气数据推送的项目,准备用缓存来存储数据.下面分别介绍一下fourinone分布式缓存和Redis分布式缓存,然后对二者进行对比,以供大家参考. 1  fourinone分布式缓存特性 1 ...

  2. 为什么学微信小程序开发

    微信小程序是什么? 触手可得,不用安装,不体验过自己是想不到的 ---张小龙 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜 一下即可打开应用.也体现了“用 ...

  3. IOS 使用dispatch_once 创建单例

    + (instantClass *)sharedClient { static instantClass *_sharedClient = nil; static dispatch_once_t on ...

  4. C/C++ 笔试、面试题目大汇总 转

    C/C++ 笔试.面试题目大汇总 这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 1.求下面函数的返回值( ...

  5. mysql 5.5源码包安装

    注:由于mysql5.5的源码包安装与mysql之前的版本安装方法不同,故写一篇随笔记录.5.5的版本不再是./configure make make install 这里用到了cmake了,cmak ...

  6. <audio> 标签简介

    定义和用法 <audio> 标签定义声音,比如音乐或其他音频流. 实例 一段简单的 HTML 5 音频: <audio src="someaudio.wav"&g ...

  7. Android测试框架2(非原创)

    package com.example.sqlitedatabase.test; import android.content.ContentValues;import android.databas ...

  8. JSON 日期格式带 T 问题

    var iso = new IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-dd"; object obj = new  ...

  9. HDU 5729 - Rigid Frameworks

    题意:    对于一个由n*m个1*1的菱形组成可任意扭曲的矩形(姑且这么说),求添加斜线*(两种)让菱形变成正方形,使得整个矩形固定且无法扭曲的方案数. 分析:    n*m的矩形有如下性质:( 平 ...

  10. 设计模式--委托模式C++实现

    原文章地址:http://www.cnblogs.com/zplutor/archive/2011/09/17/2179756.html [委托模式 C++实现] 我对.Net的委托模型印象很深刻,使 ...