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数据库 ...
随机推荐
- [翻译]Writing Component Editors 编写组件的编辑器
Writing Component Editors 编写组件的编辑器 All common control editors (opened from a control's context me ...
- XML--修改XML数据
DECLARE @xmlDoc XMLset @xmlDoc='<root> <book id="0001"> <title>C# Progra ...
- ASP.NET WebAPI 测试文档 (Swagger)
ASP.NET WebAPI使用Swagger生成测试文档 SwaggerUI是一个简单的Restful API测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON配置显示API .项目 ...
- .net程序员书单
C# 基础 <CLR via C#> <c# 高级编程> 框架学习 <WPF编程宝典 > (英文名:<Pro WPF 4.5 in C#. Windows P ...
- ASP.NET中Onclick和OnserverClick事件的区别 (转)
对于服务器按钮控件(即<asp:Button>类型的按钮): 服务器响应事件:OnClick 客户端响应属性:OnClientClick 对于html按钮控件(即<input typ ...
- django系列3.4-- request对象和response对象(未完待续)
一.request对象 详细信息可以查阅django官方文档 共有五种请求相关的常用值 request.path_info 返回用户访问的url不包括域名 request.method 请求中使用的H ...
- java学习笔记—国际化(41)
国际化:internationalization即I18N. 举例: 本科高校的网站,一般的都有中文和英文两种页面风格.因此将这种根据不同用户群体显示不同的页面风格的方式称之为页面的国际化. 翻译 V ...
- [bzoj4444] 国旗计划 双指针+倍增
Description A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名优秀的边 ...
- [网络] DHCP 之 Mac 绑定
[网络] DHCP 之 Mac 绑定 一.瞎扯 今天我们来简单聊聊Mac绑定,这在设备管理时常常被使用. 当然你可能会说我可以设置静态IP啊.先不提静态IP容易冲突.现在我在设置树莓派时就遇到一个问题 ...
- 空行会影响 Java 编译吗?
简评:往往越简单的问题越容易被人们忽略. 问题 这个月的 Stack Overflow 有篇热门文章是国外有位开发者提出: 当我仅仅对 Java 类增加了一行空行,为什么编译后得到了两个不同的字节码文 ...