当前位置: 首页 > news >正文

MySQL---C/C++链接

一、准备

1.下载mysql库

apt/yum install -y mysql-community-server

2.创建用户

create user '用户名'@'%' identified by '密码'
//%代表在所有设备上都能登录,只能本地登录使用'loccalhost'

3.设置权限

grant 权限 on 范围 to 用户名
//例: grant all on conn.* to 'connector'@'%'

4.官方文档

 mysql.com --> Documentation ->C API -->C API Function Reference

5.包含头文件

#include<mysql/mysql.h>

6.编译

g++ -o mytest test.cc -std=c++11 -L/lib64/mysql -lmysqlclient

二、常用接口

1.mysql_init

功能:初始化

MYSQL *my = mysql_init(nullptr);//失败返回nullptr

2.mysql_close

功能:关闭

mysql_close(my);//不用了就要关闭

3.mysql_real_connect

功能:连接mysql

        参数解释:host参数用于指定MySQL服务器的主机地址

        user用户用passwd密码连接db数据块

        port连接端口号,默认3306

        unix_socket 设置为nullptr

        client_flag设置为0

返回值:失败返回null

参数准备

const std::string host = "127.0.0.1";//localhost也可以
const std::string user = "connector";
const std::string database = "conn";
const unsigned int port = 3306;

使用

if(mysql_real_connect(my,host.c_str(),user.c_str(),passwd.c_str(),database.c_str(),port,nullptr,0) == nullptr)
{std::cout << "connect error" << std::endl;return 2;
}
std::cout << "connect success" << std::endl;

4.mysql_query

功能:下达指令

我有一个表

使用

std::string sql;
while(true)
{std::cout << "MySQL>>>";if(std::getline(std::cin,sql) || sql == "quit") {std::cout << "bye" << std::endl;break;}int n = mysql_query(my,sql.c_str());if(n == 0)//成功std::cout << sql << "success: " << n << std::endl;elsestd::cerr << sql << "failed: " << n << std::endl;;
}

插入成功

//常用示例
std::string sql = "update user set name='jimmy' where name=Tom";
int n = mysql_query(my, sql.c_str());
if(n == 0) std::cout << sql << " success" << std::endl;
else std::cout << sql << "failed" << std::endl;

5.mysql_set_character

功能:插入中文后再select会出现乱码,是因为建立链接的默认字符集不同,该函数能建立字符集

使用,在初始化后

mysql_set_character_set(my, "utf8");

6.mysql_store_result

MYSQL_RES:类型名,将select查出来的数据组织好

MYSQL_RES* res = mysql_store_result(my);
if(nullptr == res)
{std::cerr << "mysql_store_result error" << std::endl;return 4;
}

7.mysql_num_rows

功能: 获取行数

mysql_num_fields

功能:获取列数

使用案例

my_ulonglong rows = mysql_num_rows(res);my_ulonglong fields = mysql_num_rows(res);std::cout << "行:" << rows << std::endl;std::cout << "列:" << fields << std::endl;

8.mysql_fetch_row

功能:获取一行数据

用法:row保存一行数据,先读取一行,然后再按列打印

for(int i = 0; i < rows; i++)
{MYSQL_ROW row = mysql_fetch_row(res);for(int j = 0; j < fields; j++){std::cout << row[j] << '\t';}std::cout << std::endl;
}

9.mysql_fetch_fields

功能:提取属性

用法

MYSQL_FIELD *fields_array = mysql_fetch_fields(res);
for(int i = 0; i < fields; i++)
{std::cout << fields_array[i].name << '\t';
}
std::cout << std::endl;

10.mysql_free_result

功能:查询结果不会自动释放,必须使用该函数主动释放

使用

mysql_free_result(res);

三、补充内容

1.一个问题:mysql_store_result的返回值MYSQL_RES到底是什么?

2. mysql_fetch_fields能提取的属性

3.MYSQL_FIELD类型

typedef struct MYSQL_FIELD {char *name;               /* Name of column */char *org_name;           /* Original column name, if an alias */char *table;              /* Table of column if column was a field */char *org_table;          /* Org table name, if table was an alias */char *db;                 /* Database for table */char *catalog;            /* Catalog for table */char *def;                /* Default value (set by mysql_list_fields) */unsigned long length;     /* Width of column (create length) */unsigned long max_length; /* Max width for selected set */unsigned int name_length;unsigned int org_name_length;unsigned int table_length;unsigned int org_table_length;unsigned int db_length;unsigned int catalog_length;unsigned int def_length;unsigned int flags;         /* Div flags */unsigned int decimals;      /* Number of decimals in field */unsigned int charsetnr;     /* Character set */enum enum_field_types type; /* Type of field. See mysql_com.h for types */void *extension;
} MYSQL_FIELD;

四、代码展示

#include<iostream>
#include<string>
#include<mysql/mysql.h>const std::string host = "127.0.0.1";
const std::string user = "connector";
const std::string passwd = "123456";
const std::string database = "conn";
const unsigned int port = 3306;int main()
{// std::cout<<"mysql client version: "<<mysql_get_client_info()<<std::endl;MYSQL *my = mysql_init(nullptr);if(nullptr == my){std::cerr << "init MySQL error" << std::endl;return 1;}if(mysql_real_connect(my,host.c_str(),user.c_str(),passwd.c_str(),database.c_str(),port,nullptr,0) == nullptr){std::cout << "connect error" << std::endl;return 2;}std::cout << "connect success" << std::endl;mysql_set_character_set(my, "utf8");// std::string sql = "update user set name='jimmy' where name=Tom";std::string sql = "select * from user";// std::string sql = "insert into user(name,age,telphone) values('张三',33,'3333')";int n = mysql_query(my, sql.c_str());if(n == 0) std::cout << sql << " success" << std::endl;else std::cout << sql << "failed" << std::endl;MYSQL_RES* res = mysql_store_result(my);if(nullptr == res){std::cerr << "mysql_store_result error" << std::endl;return 4;}my_ulonglong rows = mysql_num_rows(res);my_ulonglong fields = mysql_num_rows(res);std::cout << "行:" << rows << std::endl;std::cout << "列:" << fields << std::endl;//获取列名MYSQL_FIELD *fields_array = mysql_fetch_fields(res);for(int i = 0; i < fields; i++){std::cout << fields_array[i].name << '\t';}std::cout << std::endl;//获取表内容for(int i = 0; i < rows; i++){MYSQL_ROW row = mysql_fetch_row(res);for(int j = 0; j < fields; j++){std::cout << row[j] << '\t';}std::cout << std::endl;}mysql_free_result(res);mysql_close(my);return 0;
}

http://www.dtcms.com/a/618970.html

相关文章:

  • 怎么进入微信官方网站汉字logo标志设计
  • 深入理解 Java Stream 流:函数式编程的优雅实践(全面进阶版)
  • 高端网站制作报价网站怎么做搜索
  • CSS Fonts(字体)
  • 莱芜手机网站设计公司网站上传到空间
  • skywalking整合logback.xml日志,日志文件出现乱码问题解决
  • 网站建设栏目添加收费电影网站怎么做
  • 【LwIP源码学习8】netbuf源码分析
  • 蓝牙EIR数据
  • 外企网站建设中国庆阳网
  • nfs共享服务
  • vue2[webpack]中接入vue3[vite]的qiankun微前端服务
  • Apache Hadoop-学习笔记1
  • 网站年龄和域名年龄贸易公司怎么做网站比较好
  • 如何拥有一个自己的网站网站安全管理制度建设下载
  • 有做阿里网站的吗网站开发后未付维护费
  • 百度推广必须做手机网站吗网页游戏网站mhn
  • 2018做网站的视频个人直播平台搭建
  • OpenAI 最新研究进展:定义和评估大语言模型中的政治偏见:OpenAI的透明度承诺
  • Streamlit 莫斯电码转换器学习笔记
  • 告别传统PPT!用reveal.js在文汇百川webOS上打造酷炫动态演示
  • 什么是行业网站?揭阳企业建站系统
  • 如何让新网站18.ppt网站是谁做的
  • 第四十三篇:MySQL事务:ACID特性、隔离级别与幻读、脏读详解
  • 网页设计个人网站设计wordpress 头部菜单
  • wordpress网站怎么加小游戏江门市住房和城乡建设局门户网站
  • 嘉兴快速建站模板响应式科技公司网站模板下载
  • 怎样增加网站的权重旧手机 搭建wordpress
  • Rust 命令行密码管理器工具开发
  • Restful协议举例,主要作用