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

如果做夺宝网站古风ppt模板免费下载

如果做夺宝网站,古风ppt模板免费下载,施工合同,推广系统建站访问数据库的方式: 命令行:使用命令行输入SQL指令直接访问。需记忆命令和SQL语法,对新手不友好。正因如此推荐新手使用该方式访问,能倒逼学习者对SQL语法的记忆,并对MySQL更深入理解。图形化界面访问:使用…

访问数据库的方式:

  • 命令行:使用命令行输入SQL指令直接访问。需记忆命令和SQL语法,对新手不友好。正因如此推荐新手使用该方式访问,能倒逼学习者对SQL语法的记忆,并对MySQL更深入理解。
  • 图形化界面访问:使用图形化界面工具,如:DBeaver、DataGrip、Navicat、HeidiSQL(MySQL)、 MySQL Workbench。特点:有语法提示,可以直接对数据手动增删改。
  • 编程接口:在编写程序时,可以直接通过API接口来连接并访问数据库,嵌入代码,与业务逻辑结合。
  • ......

        MySQL的访问者都属于客户端,如以上三种方式,这一期将要讲的是C/C++编程接口的访问。

        第三方库的准备:C/C++原生库并不提供连接MySQL的API接口,需要导入第三方库,不过通常都在下载MySQL服务时就下好了,只需要在编译时加上动态库链接和相应地址。如果没有库,使用以下指令安装:

yum install myaql-community-server

客户端初始化过程:

  1. 初始化mysql操作句柄
  2. 连接mysql服务器
  3. 设置客户端的字符集
  4. 选择想要操作的数据库
  5. 操作库(增删改查)

初始化句柄

句柄类似一个数据结构的地址,到时候用来找到MySQL的相关信息,类似FILE*。

代码示例:

MYSQL* mysql=mysql_init(nullptr);

连接mysql服务器

函数原型:

MYSQL *mysql_real_connect(MYSQL *mysql,           // MySQL 连接句柄const char *host,       // 主机名或IP地址const char *user,       // MySQL用户名const char *passwd,     // 密码const char *db,         // 默认数据库unsigned int port,      // 端口号const char *unix_socket,// Unix域套接字路径unsigned long client_flag // 客户端标志
);

参数: 

  • mysql:mysql句柄,由 mysql_init() 初始化的连接句柄指针。

  • host:主机名 (如 "localhost"或"127.0.0.1")。

  • user:用户名,如果为NULL,表示使用当前登录用户名。

  • passwd:用户密码。如果为NULL,表示不使用密码。

  • db:要使用的默认数据库名称,可以为NULL。

  • port:mysql服务的端口号,如果为0,使用默认端口(3306)。

  • unix_socket:套接字路径,暂不关心,设置为NULL,表示使用默认套接字。

  • client_flag:标志位,很少用到,暂时不关系,设置为0即可。

返回值:

  • 成功:返回原来的mysql句柄。
  • 失败:返回nullptr。

代码示例:

#include <iostream>
#include <mysql/mysql.h>
#define HOST "localhost"  //或#define HOST "120.0.0.1"
#define USER "root"
#define PASSWORD "XyK@71986582"
#define DB "conn"
#define PORT 3306
main()
{//......mysql = mysql_real_connect(mysql,HOST,USER,PASSWORD,DB,PORT,nullptr,0);if(mysql==nullptr){std::cout<<"mysql_real_connect fail"<<std::endl;return 1;}//......return 0;
}

在实际开发中最好不要用root用户访问。

设置客户端的字符集

        在连接数据库后要保持客户端与mysqld的字符集一致,要不然会出现乱码。通常都统一设为utf8。

代码示例:

mysql_set_character_set(mysql,"utf8");

实参mysql是由 mysql_init() 初始化的连接句柄指针。


选择需要操作的数据库

        在做连接时已经选好了现在就不用选,只是考虑到中途需要换其他库的情况。

mysql_select_db(mysql,"conn");

conn为一个准备好的数据库的库名。 


执行sql语句(增删改查)

使用

        int mysql_query(MYSQL*, const char*)

 其中参数为mysql句柄和SQL语句,SQL语句以字符串的形式传入。成功返回0,否则返回非0。

以增为例,如下:

std::string insert1 = "insert into stu values(null,'张三',18,187562354)";
n = mysql_query(mysql, insert1.c_str());
if (n != 0)
{std::cout << "mysql_query fail" << std::endl;return 1;
}

        增删改都只要sql语句执行成功,数据库中的时间就发生改变了,没有反馈结果。而查询是不一样的,因为首先执行语句成功,结果在服务器里边,需要把它保存到本地进行访问。

数据查询流程:

  1. 使用sql语句查询成功后把查询结果保存到本地(获取结果集)
  2. 获取查询结果集的结果条数
  3. 遍历结果集
  4. 释放结果集的空间

数据查询结果是在服务器端的,我们需要把它保存到本地内存才能进行访问。使用

        MYSQL_RES* mysql_store_result(MYSQL*)

        返回值为MYSQL_RES*类型,是一个结构体类型的指针,里面保存了查询结果和相关属性。其中mysqld把所有查询结果都当做字符串类型给我们返回。我们可以把结果当做char* [ ][ ](或char** []),即储存char*的二维数组。

获取结果集,代码示例:

MYSQL_RES *res = mysql_store_result(mysql);
if (res == nullptr)
{std::cout << "mysql_store_result fail" << std::endl;return 1;
}

接下来要做的从res中获取结果即可,如果做呢?需要知道它的行和列然后进行遍历。

获取行数:

int row = mysql_num_rows(res);

获取列数:

int col = mysql_num_fields(res);

遍历并打印数据:

使用函数

        MYSQL_ROW mysql_fetch_row(MYSQL_RES*) 

获取单个行信息, result会记录每次遍历的到行。代码示例:

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

释放结果集:

结果集在本地开辟了空间使用完后需要释放,使用mysql提供的接口:

        void mysql_free_result(MYSQL_RES*)

释放MySQL操作句柄,使用函数:
        void mysql_close(MYSQL*);

即:

mysql_free_result(res);
mysql_close(mysql);

源码:

#include <iostream>
#include <mysql/mysql.h>
#define HOST "localhost" // 或#define HOST "120.0.0.1"
#define USER "root"
#define PASSWORD "XyK@71986582"
#define DB "conn"
#define PORT 3306
int main()
{// 创建MySQL句柄MYSQL *mysql = mysql_init(nullptr);// 连接数据库mysql = mysql_real_connect(mysql, HOST, USER, PASSWORD, DB, PORT, nullptr, 0);if (mysql == nullptr){std::cout << "mysql_real_connect fail" << std::endl;return 1;}// 设置客户端字符集,与mysqld保持一致。int n = mysql_set_character_set(mysql, "utf8");if (n != 0){std::cout << "mysql_setcharacter_set fail" << std::endl;return 1;}// 选择要操作的数据库// 在做连接时已经选好了现在就不用选,只是考虑到中途需要换其他库的情况。// n = mysql_select_db(mysql,"conn");// 准备工作做好了,接下来操作库:// 执行SQL语句std::string insert1 = "insert into stu values(null,'张三',18,187562354)";std::string insert2 = "insert into stu values(null,'李四',18,187562154)";std::string delete1 = "delete from stu where id=1";std::string update = "update stu set name='王五' where name = '李四'";std::string sel = "select * from stu";n = mysql_query(mysql, sel.c_str());if (n != 0){std::cout << "mysql_query fail" << std::endl;return 1;}MYSQL_RES *res = mysql_store_result(mysql);if (res == nullptr){std::cout << "mysql_store_result fail" << std::endl;return 1;}int row = mysql_num_rows(res);int col = mysql_num_fields(res);for (int i = 0; i < row; i++){MYSQL_ROW r = mysql_fetch_row(res);for (int j = 0; j < col; j++){std::cout << r[j] << '\t';}std::cout << std::endl;}mysql_free_result(res);mysql_close(mysql);return 0;
}

非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!74c0781738354c71be3d62e05688fecc.png

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

相关文章:

  • 建网站能挣钱吗东莞seo快速排名
  • 网站建设专家证书网站定制排名
  • 做学习交流网站东营最新通知
  • 企业网站建设的评价指标直播软件怎么开发
  • 买过域名之前就可以做网站了吗温岭网站建设
  • 游仙建设局官方网站企业建设好一个网站后 如何进行网站推广
  • 做影视网站代理犯法吗vps设置网站访问用户权限
  • 泰州网站建设电话网站搭建心得体会
  • 自己动手建立网站3wordpress page页
  • 百度网站两两学一做心得体会广告公司取名大全最新版的
  • 做书封面的模板下载网站优秀的电商设计网站
  • 网站设计销售关于网站建设的题目
  • 用照片做的ppt模板下载网站好linux系统上的wordpress
  • 做网站资质荣誉用的图片佛山手工活外发加工网
  • 淘宝商城的网站建设怎样做 云知梦 网站
  • 150m网站空间流量大吗淘宝页面设计模板
  • 在线直播网站建设免费商城网站建设平台
  • 钢铁网站建设wordpress 按点击调用热门文章
  • 英文网站建站做网站界面设计注意什么
  • 优推宝可以做自己网站吗阿里云服务器的网站备案流程图
  • 国家示范校建设成果网站wordpress 创建分类
  • 生成网站有吗免费的湖南做网站的公司有哪些
  • 英语网站建设策划书WordPress添加内容评论可见
  • 东莞网站建设开发长治市网站开发
  • 青海网站制作南宁自助建站软件
  • 宣传型企业网站设计网站开发需要python 吗
  • 山东省建设厅网站特种作业网站维护及更新方案
  • 网站免费推广100种方法中信建设有限责任公司国内区事业部招聘
  • 大石网站建设济南网站建设找老兵
  • 专门做建筑设计图库的网站设计专业seo网站优化推广排名教程