mysqlAPI实例
来源:互联网 发布:软件招标网 编辑:程序博客网 时间:2024/05/01 01:31
1)查找libmysqlclient库在什么地方:find / -name "libmysqlclient.*"
并获取其路径 // /usr/lib64/mysql/libmysqlclient.a
2)查看放mysql.h的目录:cd /usr/include/mysql/ ls
3)编译:
gcc dm01_hello.c -o dm01_hello -I/usr/include/mysql/ -L/usr/lib64/mysql/ -lmysqlclient -ldl -lstdc++ -lm -lrt -lpthread;
一、API基本操作
1)初始化MYSQL句柄:MYSQL *mysql_init();
2)连接数据库:MYSQL *mysql_real_connect( ... );
3)执行SQL语句:int mysql_query(MYSQL *mysql, const char *query)
4)关闭连接:void mysql_close();
5)中文乱码问题:mysql_query(mysql, "set names utf8");
查询案例
代码:
#include<stdio.h>
#include<stdlib.h>
#include<mysql.h>
int main()
{
MYSQL *mysql=NULL;
int ret,i;
//初始化
mysql=mysql_init(NULL);
if(mysql==NULL)
{
printf("mysql_init error:%s\n",mysql_errno(mysql));
exit(1);
}
printf("init ok.....\n");
//连接
mysql=mysql_real_connect(mysql, "127.0.0.1", "root", "123456","mydb61", 0, NULL,0);
if(mysql==NULL)
{
printf("mysql_real_connect error:%s\n",mysql_errno(mysql));
exit(1);
}
printf("mysql_real_connect ok.....\n");
//执行SQL语句
//int mysql_query(MYSQL *mysql, const char *query)
char *query="select *from emp";
ret=mysql_query(mysql, query);
if(ret!=0)
{
printf("mysql_query error:%s\n",mysql_errno(mysql));
exit(1);
}
//获取列
//unsigned int mysql_field_count(MYSQL *mysql)
int count =mysql_field_count(mysql);
//获取结果集
//MYSQL_RES *mysql_store_result(MYSQL *mysql)
MYSQL_RES *result =mysql_store_result(mysql);
if(result==NULL)
{
printf("mysql_store_result error:%s\n",mysql_errno(mysql));
exit(1);
}
//打印表头
//MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
MYSQL_FIELD *fields;
fields = mysql_fetch_fields(result);
for(i = 0; i < count; i++)
{
printf("%s\t",fields[i].name);
}
printf("\n");
//解析结果集
//MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
MYSQL_ROW row;
while ((row = mysql_fetch_row(result)))
{
for(i = 0; i < count; i++)
{
printf("%s\t",row[i]);
}
printf("\n");
}
//释放结果集
//void mysql_free_result(MYSQL_RES *result)
mysql_free_result(result);
//关闭
mysql_close(mysql);
return 0;
}
二、多语句执行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <termios.h>
#include <mysql/mysql.h>
void process_result_set(MYSQL *mysql, MYSQL_RES *result) // 打桩
{
int i = 0;
int num = 0;
num = mysql_field_count(mysql); //获取列
// 表头
MYSQL_FIELD *fields;
//num_fields = mysql_num_fields(result);
fields = mysql_fetch_fields(result);//返回表头字段
for (i = 0; i < num; i++)
{
printf("%s\t", fields[i].name);
}
printf("\n");
MYSQL_ROW row = NULL;
while (row =mysql_fetch_row(result) )//解析结果集
{
// 多少列
for (i=0; i<num; i++)
{
printf("%s\t", row[i]);
}
printf("\n");
}
printf("\n");
}
int main(int arg, char *args[])
{
int ret = 0, i=0, status = 0;
MYSQL *mysql;
MYSQL_RES *result;
MYSQL_ROW row;
MYSQL_FIELD *fields;
unsigned int num_fields;
mysql = mysql_init(NULL);
if (mysql == NULL)
{
ret = mysql_errno(mysql) ;
printf("connect error, %s\n", mysql_error(mysql));
goto END;
}
//连接到mysql server
mysql = mysql_real_connect(mysql, "localhost", "root", "123456", "mydb61", 0, NULL, CLIENT_MULTI_STATEMENTS);
if (mysql == NULL)
{
ret = mysql_errno(mysql) ;
printf("connect error, %s\n", mysql_error(mysql));
goto END;
}
///////
/* execute multiple statements */
status = mysql_query(mysql,
"DROP TABLE IF EXISTS test_table;\
CREATE TABLE test_table(id INT);\
INSERT INTO test_table VALUES(10);\
UPDATE test_table SET id=20 WHERE id=10;\
SELECT * FROM test_table;\
DROP TABLE test_table");//实验时注意注释删除表的语言
if (status)
{
printf("Could not execute statement(s)");
mysql_close(mysql);
exit(0);
}
/* process each statement result */
do {
/* did current statement return data? */
result = mysql_store_result(mysql);////获取结果集
if (result) //是select语言
{
/* yes; process rows and free the result set */
process_result_set(mysql, result); // 打桩
mysql_free_result(result);//释放结果集
}
else /* no result set or error */ //非select语言
{
if (mysql_field_count(mysql) == 0)////获取列,如果列为0
{
printf("%lld rows affected\n",
mysql_affected_rows(mysql));//返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数
}
else /* some error occurred */
{
printf("Could not retrieve result set\n");
break;
}
}
/* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
if ((status = mysql_next_result(mysql)) > 0)//在多语句执行过程中返回/初始化下一个结果
printf("Could not execute statement\n");
} while (status == 0);
END:
if (mysql != NULL)
mysql_close(mysql); //断开与SQL server的连接
return 0;
}
0 0
- mysqlAPI实例
- 用C++封装一个mysqlAPI
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- 实例
- IOS APP程序发布IPA以及发布上传到AppStore
- 浅谈动感歌词-歌词解析篇
- 集合框架_HashMap集合键是Stirng值是String的案例
- live555 - testOnDemandRTSPServer
- 设计模式之观察者设计模式
- mysqlAPI实例
- nginx配置
- 12 个好用且不花钱的网络监控工具
- (?)数据结构实验之链表七:单链表中重复元素的删除
- 17 - 03 - 28 图解HTTP(32)
- 哈夫曼树编码及其图形化的实现
- 谈谈我理解的测试的核心价值
- mininet安装
- 矩阵第三章总结笔记