mysql基础:mysql与C结合实例
一个简单的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结合实例的更多相关文章
- MySQL基础 - mysql命令行客户端
在Linux系统当中,mysql作为一个客户端命令程序,在很大程度上连接数据库都是使用mysql,因此很有必要熟悉mysql命令行的使用. 这里假设数据库用户为icebug,密码为icebug_pas ...
- MySQL基础、索引、查询优化等考察点
MySQL基础 MySQL数据类型 整数类型 TINYINT. SMALLINT. MEDIUMINT. INT. BIGINT 属性:UNSIGNED 长度:可以为整数类型指定宽度,例如:INT(1 ...
- 【摘】Mysql备份还原数据库之mysqldump实例及参数详细说明
原文http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html 我们在运营项目的过程中肯定会遇到备份数据库,还原数据库的情况,我们一 ...
- Mysql备份还原数据库之mysqldump实例及参数详细说明
[root@localhost myexport]# mysqldump -h211.100.75.204 -uroot -p@^#coopen -P5029 --single-transaction ...
- 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建
数据库基础概述 大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...
- MySQL基础操作命令
MySQL基础操作命令 1. 查看MySQL进程 ps -ef|grep mysql |grep -v grep 2. 查看MySQL端口 ss -lnt | grep 3306 3. MySQL的启 ...
- python【第十二篇】Mysql基础
内容: 1.数据库介绍及MySQL简介 2.MySQL基本操作 1 数据库介绍 1.1什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同 ...
- MYSQL:基础—存储过程
MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...
- 【运维工程师必知必会】——MySql基础
一.SQL语句 1.分类 DDL(data definition language)数据定义语言(create.alter.drop),管理基础数据.例如:库.表 #运维要熟练,开发也要熟练 ...
- mysql、mariadb安装和多实例配置
本文目录:1. mysql单实例安装 1.1 rpm安装mysql 1.2 通用二进制包安装mysql 1.2.1 初始化数据库 1.2.2 安装后的规范化操作 1.3 编译安装 1.3.1 编译安装 ...
随机推荐
- OpenCV MFC 模块间通信
1. 新建MFC项目 点击完成. 2. 添加按钮 在"工具箱"中找到"Button"控件,添加至界面: 2. 配置opencv, 添加colordetecto ...
- 如何统一删除word中的超链接
[摘要] 我们从别处拷贝文字,或从网上复制的文字,里面有很多超级链接,如何可以批量删除这些链接呢?这里介绍两种批量删除链接的方法. [正文] 方法一:使用快捷键删除超链接 有个神奇的快捷键,可以帮我们 ...
- 3第一周课后练习·阅读计划(3)-使用函数来访问私有数据成员
/* * Copyright (c) 2015, 计算机科学学院,烟台大学 * All rights reserved. * 文件名:test.cpp * 作 靠:刘畅 * 完成日期:2015年 3 ...
- Android清理内存
Android内存清理,利用ActivityManager获取当前正在运行的进程,清理这些进程释放内存. 可以根据importance的不同来判断前台或后台RunningAppProcessInfo ...
- 有关Oracle cvu和cvuqdisk
有关Oracle cvu和cvuqdisk cvu的下载链接: http://www.oracle.com/technetwork/products/clustering/downloads/cvu- ...
- FFMPEG中最关键的结构体之间的关系
FFMPEG中结构体很多.最关键的结构体可以分成以下几类: a) 解协议(http,rtsp,rtmp,mms) AVIOContext,URLProtocol,URLContext主要 ...
- T4 模板 vs2010
参阅:http://dotnet.cnblogs.com/page/78398/ T4模板的定义非常简单,整个模板的内容包括两种形式:静态形式和动态动态.前者就是直接写在模板中作为原样输出的文本,后者 ...
- 查询ID为5的数据的前后各一行数据,ID不连续
首先假如有一张表 test 那么我们要查的就是 3 和 7 这里我的思路是 用SQL Server 自带的Row_Number 函数把 ID=5 的 RowNo 查出来,因为RowNo是连续的,所以它 ...
- Java单例模式的线程安全问题
单例模式有两种书写模式:饿汉式和懒汉式. 1.饿汉式 class Single{ private final static Single s = new Single(); private Singl ...
- CSS基础要点概况
1.CSS概述 1)css指层叠样式表 2)样式定义如何显示HTML元素 3)样式通常存储在样式表中 4)把样式添加到HTML4.0中,是为了解决内容与表现分离的问题 5)外部样式表可以极大提高工作效 ...