企业网站设计原则,线上推广的公司,网站服务公司哪个好,企业网站设计html代码MySQL Connection
连接数据库的客户端除了命令行式的还有图形化界面版本#xff0c;网页版本#xff0c;当然也包括语言级别的库或者是包#xff0c;能够帮助我们直接连接数据库#xff1b;
一、语言连接库下载
方式一#xff1a;不建议使用#xff0c;需要自己配置…MySQL Connection
连接数据库的客户端除了命令行式的还有图形化界面版本网页版本当然也包括语言级别的库或者是包能够帮助我们直接连接数据库
一、语言连接库下载
方式一不建议使用需要自己配置环境变量或者将库文件和头文件添加到系统路径之下
使用语言连接数据库需要注意安装相关的开发库
网址https://www.mysql.com/然后去downloads选中MySQL Community Downloads
下载连接库Connector/C 8.0找到对应的版本 方式二进行安装yum源然后在进行下载并安装连接库
sudo yum install -y mysql-devel二、使用C/C访问数据库
2.1MySQL库中的常用数据结构
MYSQL这个结构主要用于数据库的连接
MYSQL_RES这个结构主要用于保存读取结果以行为单位用于MYSQL的查询结果转储
MYSQL_ROW这个结构主要用于获取转储中的一行数据记录是一个二维数组
MYSQL_FIELD这个结构主要用于获取转储中的相关列属性是一个结构化的数据类型2.2MySQL常用接口
1.使用MySQL必须先进行初始化初始化一些数据结构
MYSQL *mysql_init(MYSQL *mysql);
//MYSQL*就相当于C语言中的FILE*和系统的fd文件描述符用来描述MySQL客户端相关的资源也可以称之为句柄2.使用MySQL前需要进行连接MySQL
MYSQL *
mysql_real_connect(MYSQL *mysql,const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long client_flag);3.修改MySQL字符集
需要注意连接之后的编码集默认是latin1
int mysql_set_character_set(MYSQL *mysql,const char *csname);4.向MySQL中发送SQL语句
对于增删改只需要执行sql即可但是select需要进行后续操作将数据提交到上层
还需要注意字符集防止乱码
int mysql_query(MYSQL *mysql,const char *stmt_str)//0表示成功非零表示失败5.当不使用了需要关闭MYSQL*句柄
void mysql_close(MYSQL*mysql);2.3C/C查询的处理细节
当查询完成之后会将查询结果存放到句柄当中此时就需要将查询结果提取出来从句柄当中格式化提取到MYSQL_RES中进行转储便于进行二次处理
MYSQL_RES *mysql_store_result(MYSQL *mysql);
//需要注意的是该函数会malloc一段空间所以一定要记得进行free否则就会造成内存泄露
void mysql_free_result(MYSQL_RES *result)//使用此函数进行释放内存空间 MySQL中存储的表结构实际上是存储了两种内容一种是列属性名一种是数据内容当提取表中的记录时就不会考虑约束了而是i直接提取出来字符串
可以将MYSQL_RES结构看作一个char** array[]的结构其中的一个数组会被当作一行记录每一条记录由不同的列构成不同的列是一个字符串这样既可以按照行读取也可以按照列进行读取
为了便于遍历需要获取行数和列数就需要用到以下接口实现
unsigned int mysql_num_fields(MYSQL_RES *result)//返回列数
my_ulonglong mysql_num_rows(MYSQL_RES *result)//返回行数此时的行数表示的是数据内容不包括列名称 直接获取一行的结果再重复使用下列函数的过程当中会自动遍历到下一行
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);//返回值本质上就是一个char**也就是一个二维数组 获取列名使用如下接口
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)//一次性获取所有的列
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)//一个一个的获取并每次使用会自动下后一个迭代示例
#include iostream
#include mysql/mysql.h
#include unistd.h
#include string
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::string;const string host localhost;
const string user user_for_C;
const string password dyh15343510133.;
const string database for_comm_user_C;
const unsigned int port 8080;int main()
{// MYSQL对象初始化MYSQL *my mysql_init(nullptr);if (my nullptr){cerr init mysql error endl;return 1;}// 连接MYSQLif (mysql_real_connect(my, host.c_str(), user.c_str(), password.c_str(), database.c_str(), port, nullptr, 0) nullptr){cerr connect mysql error endl;return 2;}cout connect mysql success endl;if (mysql_set_character_set(my, utf8)){cerr 设置字符集失败 endl;return 3;}// 发送SQL语句string sql select * from user;if (mysql_query(my, sql.c_str())){cerr query error endl;}else{cout query success endl;}// 获取查询结果MYSQL_RES *myres mysql_store_result(my);if (nullptr myres){cerr mysql_store_result error endl;return 4;}int rows mysql_num_rows(myres);int columns mysql_num_fields(myres);cout 行数 rows 列数 columns endl;// 表的属性MYSQL_FIELD *fields mysql_fetch_fields(myres);for (int i 0; i columns; i){cout fields[i].name \t\t;}cout endl;// 表的内容for (int i 0; i rows; i){MYSQL_ROW row mysql_fetch_row(myres);for (int j 0; j columns; j){cout row[j] \t\t;}cout endl;}// string sql;// while (true)// {// cout mysql;// if (!std::getline(cin, sql) || sql quit)// {// cout Bye endl;// break;// }// int n mysql_query(my, sql.c_str());// if (n 0)// {// cout sql success: n endl;// }// else// {// cerr sql error: n endl;// }// }// 释放结果集mysql_free_result(myres);// MYSQL对象关闭mysql_close(my);return 0;
}三、图形化界面连接数据库
如Navicat就是使用体验较好的一个图形化界面但是是一个收费的方案还有一款是MySQL Workbench是官方提供的一种图形化界面方案是一种免费的方案