C 扩展库 - mysql API CRUD
CRUD
table
create table if not exists `student` (
`id` int auto_increment,
`name` varchar(16) not null,
`age` int not null,
`address` varchar(128) not null,
primary key (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
code
//
// Created by zhangrongxiang on 2018/3/5 14:56
// File main
//
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
MYSQL *mysql = NULL;
// const char *host = "debian";
const char *host = "localhost";
const char *user = "root";
const char *passwd = "root";
const char *db = "fgap_config";
unsigned int port = 3306;
const char *unix_socket = "/var/run/mysqld/mysqld.sock";
int flag = 0, i = 0;
const char *db2 = "test";
char sql[1024] = {0};
if (mysql_library_init(0, NULL, NULL)) {
fprintf(stderr, "could not initialize MySQL client library\n");
exit(EXIT_FAILURE);
}
mysql = mysql_init(mysql);
if (mysql == NULL) {
perror("mysql_init error");
return EXIT_FAILURE;
}
printf("mysql_init success\n");
mysql = mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, 0);
if (mysql == NULL) {
fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql));
return EXIT_FAILURE;
}
printf("mysql_real_connect success\n");
int ping = mysql_ping(mysql);
if (ping == 0) {
printf("mysql is active !\n");
} else {
return EXIT_FAILURE;
}
//////////////////////////////////////////////////////////////////
const char *clientInfo = mysql_get_client_info();
//5.5.58
printf("mysql_get_client_info : %s\n", clientInfo);
unsigned long version = mysql_get_client_version();
//50558 = 5*10000 + 5*100 + 58
//major_version*10000 + release_level*100 + sub_version
printf("mysql_get_client_version : %ld\n", version);
const char *serverInfo = mysql_get_server_info(mysql);
//5.5.58-0+deb8u1
printf("mysql_get_server_info : %s\n", serverInfo);
const char *hostInfo = mysql_get_host_info(mysql);
//Localhost via UNIX socket
printf("mysql_get_host_info : %s\n", hostInfo);
unsigned int protoInfo = mysql_get_proto_info(mysql);
//10
printf("mysql_get_proto_info : %d\n", protoInfo);
unsigned long serverVersion = mysql_get_server_version(mysql);
//50558
printf("mysql_get_server_version : %ld\n", serverVersion);
const char *mysqlInfo = mysql_info(mysql);
//(null)
printf("mysql_info : %s\n", mysqlInfo);
const char *stat = mysql_stat(mysql);
//mysql_stat : Uptime: 70217 Threads: 2 Questions: 824 Slow queries: 0 Opens: 69 Flush tables: 1 Open tables: 59 Queries per second avg: 0.011
printf("mysql_stat : %s\n", stat);
//////////////////////////////////////////////////////////////////
MYSQL_RES *pRes = mysql_list_dbs(mysql, NULL);
MYSQL_ROW row = NULL;
if (pRes) {
unsigned int fields = mysql_num_fields(pRes);
my_ulonglong rows = mysql_num_rows(pRes);
unsigned int count = mysql_field_count(mysql);
printf("mysql_num_fields : %d\n", fields);//1
printf("mysql_num_rows : %ld\n", (long) rows);//4
printf("mysql_field_count : %d\n", count);//1
while ((row = mysql_fetch_row(pRes)) != NULL) { // 打印结果集
// database: information_schema
// database: fgap_config
// database: mysql
// database: performance_schema
if (strcmp(row[fields - 1], db2) == 0) {
flag = 1;
}
printf("database: %-10s\n", row[fields - 1]);
}
mysql_free_result(pRes);
}
if (flag == 0) {
printf("no %s db -> %d\n", db2, flag);
//int mysql_create_db(MYSQL *mysql, const char *db)
/*
* //main.c:(.text+0x34f): undefined reference to `mysql_create_db'
if(mysql_create_db(mysql,"test") == 0){
printf("create test success\n");
} else{
printf("create test error\n");
}
*/
}
if (mysql_select_db(mysql, db2) == 0) {
printf("mysql_select_db(mysql, %s) success \n", db2);
MYSQL_RES *tables = mysql_list_tables(mysql, NULL);
unsigned int fields = mysql_num_fields(tables);
my_ulonglong rows = mysql_num_rows(tables);
printf("mysql_num_fields : %d\n", fields);//1
printf("mysql_num_rows : %d\n", (int) rows);//1
if (tables) {
flag = 0;
MYSQL_ROW fetchRow = NULL;
while ((fetchRow = mysql_fetch_row(tables)) != NULL) {
if (strcmp(fetchRow[fields - 1], "student") == 0)
flag = 1;
printf("table : %-10s\n", fetchRow[fields - 1]);
}
if (!flag) {
FILE *file = NULL;
file = fopen("student.sql", "r");
if (file) {
while (!feof(file)) {
char str[64] = {0};
fgets(str, sizeof(str), file);
strcat(sql, str);
}
printf("%s\n", sql);
} else {
fprintf(stderr, "fopen student.sql error\n");
exit(EXIT_FAILURE);
}
fclose(file);
int r = mysql_real_query(mysql, sql, (unsigned long) strlen(sql));
if (r == 0) {
printf("table student was created success !! \n");
} else {
printf("table student was created error !! \n");
exit(EXIT_FAILURE);
}
} else {
printf("table student already exists !! \n");
}
} else {
printf("something wrong\n");
}
}
/////////////////////////////////////////////////////////////////
memset(sql, 0, sizeof(sql));
sprintf(sql, "select count(id) from student");
int count = 0;
if (mysql_real_query(mysql, sql, (unsigned int) strlen(sql)) == 0) {
MYSQL_RES *result = mysql_store_result(mysql);
// my_ulonglong rows = mysql_num_rows(result);
unsigned int fields = mysql_num_fields(result);
MYSQL_ROW fetchRow = mysql_fetch_row(result);
count = atoi(fetchRow[fields - 1]);
printf("count %d\n", count);
mysql_free_result(result);
}
if (count < 50) {
memset(sql, 0, sizeof(sql));
for (i = 0; i < 10; ++i) {
char name[16] = {0};
char address[64] = {0};
sprintf(name, "zing-%d", i);
sprintf(address, "jiangsu-wuxi-%d", i);
sprintf(sql, "INSERT INTO `student` (`name`,`age`,`address`) VALUES('%s','%d','%s')", name, 10 + i,
address);
if (mysql_real_query(mysql, sql, (unsigned int) strlen(sql)) == 0) {
my_ulonglong id = mysql_insert_id(mysql);
printf("insert num %ld success\n", (long int) id);
}
}
}
memset(sql, 0, sizeof(sql));
sprintf(sql, "select * from student order by id asc limit 0,20");
if (mysql_real_query(mysql, sql, (unsigned int) strlen(sql)) == 0) {
MYSQL_RES *result = mysql_store_result(mysql);
unsigned int fields = mysql_num_fields(result);
printf("fields %d\n", fields);
MYSQL_ROW fetchRow;
while ((fetchRow = mysql_fetch_row(result)) != NULL) {
printf("id:%s name:%s age:%s address:%s \n", fetchRow[0], fetchRow[1], fetchRow[2], fetchRow[3]);
}
mysql_free_result(result);
}
///////////////////////////////////////////////////////////////////////////////////////
memset(sql, 0, sizeof(sql));
sprintf(sql, "update student set name='%s',age=%d,address='%s' where id between %d and %d;", "zhangrongxiang", 24,
"jiangsu-xuzhou-1", 1, 10);
if (mysql_real_query(mysql, sql, (int) strlen(sql)) == 0) {
printf("mysql_affected_rows : %d\n", (int) mysql_affected_rows(mysql));
}
mysql_close(mysql);
mysql_library_end();
return EXIT_SUCCESS;
}
/*
*
* Initialize the MySQL client library by calling mysql_library_init().
* This function exists in both the libmysqlclient C client library and the libmysqld embedded server library,
* so it is used whether you build a regular client program by linking with the -libmysqlclient flag, or an embedded server application by linking with the -libmysqld flag.
*
* Initialize a connection handler by calling mysql_init() and connect to the server by calling mysql_real_connect().
*
* Issue SQL statements and process their results. (The following discussion provides more information about how to do this.)
*
* Close the connection to the MySQL server by calling mysql_close().
*
* End use of the MySQL client library by calling mysql_library_end().
*/
C 扩展库 - mysql API CRUD的更多相关文章
- C 扩展库 - mysql API
MySQL API C API Data Structures MYSQL This structure represents handler for one database connection. ...
- C 扩展库 - mysql API general outline
Application programs should use this general outline for interacting with MySQL Initialize the MySQL ...
- C 扩展库 - sqlite3 API CRUD
CRUD struct student typedef struct STUDENT { unsigned int id; unsigned char name[16]; unsigned int a ...
- C 扩展库 - sqlite3 API
sqlite3 API Summary sqlite3 The database connection object. Created by sqlite3_open() and destroyed ...
- 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装
现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库 面向过程操作 2.mysqli扩展库 面向对象操作和面向过程操作并存 安全性和效率高于mysql扩展库 ...
- php数据库编程---mysql扩展库
1, Java有一种方式操作数据库, PHP有三种方式来操作mysql数据库.(1)mysql扩展库:(2)mysqli扩展库:(3)pdo: 2, mysql扩展库和mysql数据库区别 3, my ...
- PHP基础Mysql扩展库
mysql扩展库操作步骤如下: 1.连接数据库 2.选择数据库 3.设置操作编码 4.发送指令sql,并返回结果集 ddl:数据定义语句 dml:数据操作语句 dql:数据查询 ...
- mysql扩展库-1
启用mysql扩展库 在php.ini文件中去配置mysql扩展库 extension=php_mysql.dll 可以通过 phpinfo() 查看当前php支持什么扩展库. 在sql扩展库中创建一 ...
- php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库
1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo mysql扩展库与mysql数据库 ...
随机推荐
- tomcat下manager配置
1 安装Tomcat前需要先安装JDK.安装Tomcat后测试Tomcat成功安装. Tomcat Manager是Tomcat自带的.用于对Tomcat自身以及部署在Tomcat上的应用进行管理的w ...
- 个人项目-数组求和(语言:C++)
prog1详细要求: [第一版本程序Prog1要求:] + 给定一个数组,实现数组元素求和:,具体要求:实现对一维数组(a[100])的所有元素相加运算. + 数据准备:a)数组长度:100:b)数组 ...
- 后台web请求代码(含https,json提交)
后台web请求 namespace XXXX.Utilites { using System; using System.Collections.Generic; using System.IO; u ...
- 基于JWT的web api身份验证及跨域调用实践
随着多终端的出现,越来越多的站点通过web api restful的形式对外提供服务,很多网站也采用了前后端分离模式进行开发,因而在身份验证的方式上可能与传统的基于cookie的Session Id的 ...
- ajax 的前进 后退 问题 jquery.history
本文的前提是基于后台的,所以这里不会考虑seo的问题.同时,基于后台的管理系统,也不需要被收藏,所以也不会考虑刷新的这种类似直接敲网址的情况!!! 这里使用的是html5中的history.state ...
- 在 Docker 上运行一个 RESTful 风格的微服务
tags: Microservice Restful Docker Author: Andy Ai Weibo:NinetyH GitHub: https://github.com/aiyanbo/d ...
- django model中的save()方法
Model.save(force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS, update_fields=None) id和pk ...
- C# autofac的一些使用
这次项目需要用autofac动态注册插件dll,插件修改或扩展后,在不重新编译的情况下能加载新的插件. 于是我们用autofac从配置文件注册.注册的文件固定named.这样不管插件怎么变,我们Res ...
- iOS Apple Watch 开发
1. Watch OS 1 与 Watch OS 2 的区别 : OS 1 中界面运行在手表上,而代码(Extension)运行在手机端:OS 2 是纯正的手表原生(Native)应用 由于架构的改变 ...
- jmeter5.1.1启动提示not able to find java executable or version的解决办法
安装jmeter5.1.1完成后,启动报错not able to find java executable or version,如下图所示 解决办法: 1.在环境变量PATH的最后添加如下内容:%S ...