一、开发环境

ReadHat6.3 32位、mysql5.6.15、gcc4.4.6



二、编译



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

-I:指定mysql头文件所在目录(默认去/usr/include目录下寻找所用到的头文件)

-L:指定mysql动态库文件所在目录(默认从/usr/lib目录查找)

-l:链接libmysqlclient.so动态库

-o:生成的可执行文件名



三、完整示例

//
// main.c
// mysql数据库编程
//
// Created by YangXin on 14-5-22.
// Copyright (c) 2014年 yangxin. All rights reserved.
// #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h> MYSQL mysql; // 查询
int query();
// 修改
int update();
// 添加数据
my_ulonglong add();
// 参数化添加数据
my_ulonglong addByParams();
// 删除数据
my_ulonglong delete();
// 打印数据库服务器信息
void printMySqlInfo(); int main(int argc, const char * argv[])
{
/*连接之前,先用mysql_init初始化MYSQL连接句柄*/
mysql_init(&mysql); /*使用mysql_real_connect连接服务器,其参数依次为MYSQL句柄,服务器IP地址,
登录mysql的用户名,密码,要连接的数据库等*/
if(!mysql_real_connect(&mysql, "localhost", "root", "yangxin", "test", 0, NULL, 0)) {
printf("connecting to Mysql error:%d from %s\n",mysql_errno(&mysql), mysql_error(&mysql));
return -1;
}else {
printf("Connected Mysql successful!\n");
} printMySqlInfo(); // 设置编码
mysql_query(&mysql, "set names utf8"); // 参数化添加数据
addByParams(); // 查询
query(); // 修改
update(); // 添加
add(); // 删除
delete(); /*关闭连接*/
mysql_close(&mysql);
return 0;
} // 查询
int query()
{
int flag, i;
const char *sql = NULL;
MYSQL_RES *res = NULL;
MYSQL_ROW row = NULL;
MYSQL_FIELD *fields = NULL;
sql = "select * from t_user" ;
flag = mysql_real_query(&mysql, sql, (unsigned int)strlen(sql));
if (flag) {
printf("query error:%d from %s\n",mysql_errno(&mysql),mysql_error(&mysql));
return -1;
} // 将查询结果读取到内存当中,如果数据很多的情况会比较耗内存
res = mysql_store_result(&mysql);
// res = mysql_use_result(&mysql); // 需要用到的时候,每次从服务器中读取一行 // 字段数量
unsigned int field_count = mysql_field_count(&mysql);
printf("field_cout:%d\n",field_count); // 查询总数
my_ulonglong rows = mysql_num_rows(res);
printf("%lld\n",rows); // 获取所有字段
fields = mysql_fetch_fields(res);
for (int i = 0; i < mysql_num_fields(res); i++) {
printf("%s\t", fields[i].name);
} printf("\n"); // 遍历结果集
while((row = mysql_fetch_row(res)))
{
for (i = 0; i < mysql_num_fields(res); i++)
{
printf("%s\t",row[i]); } printf("\n");
} // 释放结果集
mysql_free_result(res); return 0;
} // 修改
int update()
{
const char *sql = NULL;
int flag = -1;
sql = "update t_user set name='lisi',age=20 where id=1";
// 执行SQL指令
flag = mysql_real_query(&mysql, sql, (unsigned int)strlen(sql));
if (flag) {
printf("update data error:%d from %s\n",mysql_errno(&mysql),mysql_error(&mysql));
return -1;
} printf("update success.\n"); return 0;
} // 添加
my_ulonglong add()
{
const char *sql = NULL;
int flag = -1;
sql = "insert into t_user(name,age,address) values ('zhangsan',40,'beijing')";
// 执行
flag = mysql_real_query(&mysql, sql, strlen(sql));
if (flag) {
printf("add data error:%d from %s\n",mysql_errno(&mysql),mysql_error(&mysql));
return -1;
} // 删除的行数
my_ulonglong affected_rows = mysql_affected_rows(&mysql); // 新添加记录的ID
my_ulonglong newid = mysql_insert_id(&mysql); printf("success add %lld record data, newid:%lld!\n",affected_rows,newid); return newid;
} // 参数化添加
my_ulonglong addByParams()
{
const char *sql = NULL;
MYSQL_STMT *stmt = NULL;
MYSQL_BIND bnd[3]; // 占位符参数数量
memset(&bnd, 0, sizeof(bnd)); // 设置手动提交事务
//mysql_autocommit(&mysql, 0); // 通过参数占位符的方式执行SQL
sql = "insert into t_user(name,age,address) values (?,?,?)"; stmt = mysql_stmt_init(&mysql);
// 预处理SQL
if(mysql_stmt_prepare(stmt, sql, (unsigned int)strlen(sql)))
{
fprintf(stderr, "mysql_stmt_prepare faild:%d from %s\n",
mysql_stmt_errno(stmt),mysql_stmt_error(stmt));
return -1;
} // 封装占位符数据
const char *name = "hanzhiqiang";
bnd[0].buffer = (void *)name;
bnd[0].buffer_type = MYSQL_TYPE_STRING;
bnd[0].buffer_length = strlen(name); int age = 30;
bnd[1].buffer = (void *)&age;
bnd[1].buffer_length = sizeof(int);
bnd[1].buffer_type = MYSQL_TYPE_LONG; const char *addres = "heimuer";
bnd[2].buffer = (void *)addres;
bnd[2].buffer_length = strlen(addres);
bnd[2].buffer_type = MYSQL_TYPE_STRING; // 绑定占位符参数值
if(mysql_stmt_bind_param(stmt, bnd))
{
fprintf(stderr, "mysql_stmt_bind_param faild:%d from %s\n",mysql_errno(&mysql), mysql_error(&mysql));
return -2;
} // 执行SQL
if (mysql_stmt_execute(stmt)) {
fprintf(stderr, "mysql_stmt_execute faild:%d from %s\n", mysql_errno(&mysql), mysql_error(&mysql));
return -3;
} // 关闭statement
mysql_stmt_close(stmt); // 提交事务
//mysql_commit(&mysql); // 事务回滚(在提交事务前)执行
// mysql_rollback(&mysql); // 获取插入数据后,数据库受影响的记录数
my_ulonglong newid = mysql_stmt_insert_id(stmt);
printf("参数化语句插入新记录的id: %lld\n",newid); // 受影响的行数
my_ulonglong affectedrows = mysql_stmt_affected_rows(stmt);
printf("参数化语句插入受影响的行数:%lld\n",affectedrows); return newid;
} my_ulonglong delete()
{
const char *sql = NULL;
int flag = -1;
sql = "delete from t_user where id > 10";
flag = mysql_real_query(&mysql, sql, strlen(sql));
if (flag) {
printf("delete data error:%d from %s\n",mysql_errno(&mysql), mysql_error(&mysql));
return -1;
} my_ulonglong affected_rows = mysql_affected_rows(&mysql);
printf("删除的行数:%lld\n",affected_rows); printf("success delete %lld record data !\n",affected_rows);
return affected_rows;
} void printMySqlInfo()
{
const char *stat = mysql_stat(&mysql);
const char *server_info = mysql_get_server_info(&mysql);
const char *clientInfo = mysql_get_client_info();
unsigned long version = mysql_get_client_version();
const char *hostinfo = mysql_get_host_info(&mysql);
unsigned long serverversion = mysql_get_server_version(&mysql);
unsigned int protoinfo = mysql_get_proto_info(&mysql); printf("stat:%s\n",stat);
printf("server_info:%s\n",server_info);
printf("clientInfo:%s\n",clientInfo);
printf("version:%ld\n",version);
printf("hostinfo:%s\n",hostinfo);
printf("serverversion:%ld\n",serverversion);
printf("protoinfo:%d\n",protoinfo); const char *charactername = mysql_character_set_name(&mysql);
printf("client character set:%s\n",charactername);
if (!mysql_set_character_set(&mysql, "utf8"))
{
printf("New client character set: %s\n",
mysql_character_set_name(&mysql));
}
}

C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)的更多相关文章

  1. C连接MySQL数据库开发之Windows环境配置及测试

    一.开发环境 Win8.1 64位.VS2013.MySQL5.5.3764位 MySQL安装目录为:C:\Program Files\MySQL\MySQL Server 5.5 二.配置工程环境 ...

  2. C连接MySQL数据库开发之Xcode环境配置及测试

    一.开发环境 Mac OS X 10.9.2 64位.Xcode5.1.MySQL5.5.37 64位 MySQL安装目录为:/usr/local/mysql 二.配置xcode连接mysql的编译选 ...

  3. C连接MySQL数据库开发之Windows环境配置及测试(转)

    http://blog.csdn.net/xyang81/article/details/26814633(转)

  4. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

  5. Go语言之进阶篇mysql增 删 改 查

    一.mysql操作基本语法 1.创建名称nulige的数据库 CREATE DATABASE nulige DEFAULT CHARSET utf8 COLLATE utf8_general_ci; ...

  6. day 37-8 关于mysql 的增 删 改 查 及联合列表

    1      VARCHAR : 字符串的意思 (括号内的数字代表尾数) 输入的字符串在这个范围内都行 CHAR  :字符串的意思(区别就有几位数字 必须写几位) INT   整数(位数) 输入的数字 ...

  7. 怎样从C#中打开数据库并进行 增 删 改 查 操作

    首先 在C#中引用数据库的操作! (因为我们用的是SQLserver数据库,所以是SqlClient) using System.Data.SqlClient; 1:要实现对数据库的操作,我们必须先登 ...

  8. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

  9. Java操作MongoDB:连接&增&删&改&查

    1.连接 ①方式一 MongoClientOptions.Builder builder = MongoClientOptions.builder(); //可以通过builder做各种详细配置 Mo ...

随机推荐

  1. Android 自学之表格布局 TableLayout

    表格布局(TableLayout),表格布局采用行.列的形式来管理UI组件,TableLayout并不需要明确的声明多少行,多少列,而是通过TableRow.其他组件来控制表格的行数和列数. 每次想T ...

  2. 实现一个脚本语言Raven(一)

    之前实现了Raven语言的0.1版,仅仅支持表达式处理与控制语句,由于不支持数组.函数.类,甚至都不是图灵完全的语言. 现在参考vczh的博客打算重新写一遍Raven语言.陈祖不愧是神啊,高中就写出支 ...

  3. case when then 与 count联合使用

    我们都知道SQL中适用case when then来转化数据库中的信息 比如  select (case sex when 0 then '男' else '女' end) AS sex  from ...

  4. WEB开发时Browser控件得到C:\fakepath\ 的解决方式

    IE9中JS获得文件上传控件的路径不对,为:C:\fakepath\ 原来要修改:  工具 -> Internet选项 -> 安全 -> 自定义级别 -> 将本地文件上载至服务 ...

  5. Oracle 递归函数与等级

    --基数数据1 SELECT ID, mt.materialtypename, mt.parenttypeid FROM material_type mt; 使用递归还是与LEVEL 1 SELECT ...

  6. SQL 查找存储过程及视图与自带函数

    查找所有所有存储过程的名称及信息select * from sysobjectswhere type='P' 查看存储过程定义语句sp_helptext [存储过程名] 查看所有视图及信息select ...

  7. HTML5游戏开发框架phaser学习日志(一)下载phaser,在IIS中配置phaser的examples站点

    phaser是HTML5开源的游戏引擎. 一.源码下载地址:https://github.com/photonstorm/phaser 二.文档结构: 三.将phaser-master部署到IIS中站 ...

  8. java之sleep、wait、yield、join、notify乱解

    ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是 ...

  9. ZOJ 1025 Wooden Sticks(快排+贪心)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=25 题目大意:机器运送n个木条,每个木条有一个长度和重量.运送第一根木 ...

  10. 九度OJ 1205 N阶楼梯上楼问题 -- 动态规划(递推求解)

    题目地址:http://ac.jobdu.com/problem.php?pid=1205 题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用非递归) 输入: 输入包括 ...