一个简单的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. hdu 5631 Rikka with Graph(图)

    n个点最少要n-1条边才能连通,可以删除一条边,最多删除2条边,然后枚举删除的1条边或2条边,用并查集判断是否连通,时间复杂度为O(n^3) 这边犯了个错误, for(int i=0;i<N;i ...

  2. Python列表及元组

    列表(list)是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号[ ] 来解析列表.列表是可变的(mutable)——可以改变列表的内容. 如 list1 = ['phy ...

  3. cocos2dx CCControlButton button大事

    =================================.cpp文件 <pre name="code" class="cpp">bool ...

  4. Oracle SQL函数之转换函数To_char汇总

    TO_CHAR(x[[,c2],C3])[功能]将日期或数据转换为char数据类型[参数]x是一个date或number数据类型.c2为格式参数c3为NLS设置参数如果x为日期nlsparm=NLS_ ...

  5. mysql 分库分表的方法

    分表后怎么做全文搜索 1.merge方式分表(不好) 2. 使用 sql union 3 使用Sphinx全文检索引擎 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多, ...

  6. mysql(5.7)在CentOs7下的安装、配置与应用

    和之前版本的mysql有一些不同,现把完整过程记下来,或许对新手来说有用. 本文描述的安装是采用通用的二进制压缩包(linux - Generic)以解压方式安装,相当于绿色安装了.   一.下载通用 ...

  7. .Net 中DataSet导出为excel的方法

    依旧是留下代码防止以后忘记 protected void Export_Click(object sender, EventArgs e) { DataSet data = "" ...

  8. Android中webView的基础使用(一)

    WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?xml version=& ...

  9. RTUILabel+正则表达式

    RTLabel和RegexKitLite都要导入第三方库 使用Regexkitlite库进行正则表达式的解析 1.库是使用MRR,如果在ARC工程里面使用这个类,必须在project->buil ...

  10. c#&.NET3.0高级程序设计-02 Enum Demo

    Enum 实例 using System; using System.Collections.Generic;   public class MyClass {     enum EmpType    ...