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

wap网站设计方案做一款网站注意啥

wap网站设计方案,做一款网站注意啥,主题网页设计,各大网站投稿目录 一、准备 测试 二、创建对象 三、连接Mysql服务 四、下达指令 3.1增删改 增加 编码格式 删除 修改 3.2查询结果 结构体理解 打印属性 打印数据 前面我们已经学习并练习了本地命令行形式的sql语句的使用,可在以后开发中我们一般 不会直接命令行操作数据库&…

目录

一、准备

        测试

二、创建对象

三、连接Mysql服务

四、下达指令

        3.1增删改

                增加

编码格式

                删除

                修改

        3.2查询结果

        结构体理解

        打印属性

        打印数据


        前面我们已经学习并练习了本地命令行形式的sql语句的使用,可在以后开发中我们一般

不会直接命令行操作数据库,今天我们认识如何在自己的代码中调用指令对数据库进CURD操作。

所有操作函数均可以在mysql.com官方中查到使用手册

一、准备

使用c或其他语言操作数据库我们需要下载对应的第三方库,并把我们需要的头文件和库路径添加到对应程序编译链接时的查询位置。下载我们可以去官网下载。https://dev.mysql.com/downloads/

主要使用mysql.h文件:

库需要远程连接:

一般在/usr/lib64/libmysqlclient.so.20

或者在/lib64/libmysqlclient.so.20

我的在下面位置

        测试

#include<iostream>
#include<mysql/mysql.h>int main()
{std::cout << "mysql test : " << mysql_get_client_info() << std::endl;return 0;
}

若能运行成功看到mysql版本就说明准备完成

二、创建对象

MYSQL * mysql_init(MYSQL*mysql)
eg:MYSQL*mfp = mysql_init(nullptr);返回:NULL if there was insufficient memory to allocate a new object.与mysql_close(MYSQL *)搭配使用,与打开关闭文件类似,防止空间浪费泄露

三、连接Mysql服务

申请完对象我们就可以连接mysql服务了。

首先我们要创建我们要连接的mysql服务用户,不要直接使用root用户,注意千万不要把mysql的端口暴露在公网中,这里只是测试,用完请立即删除,避免遭到攻击!!!

MYSQL *mysql_real_connect(MYSQL *mysql,               --创建的mysql对象句柄const char *host,           --连接的用户const char *user,           --连接的主机const char *passwd,         --连接所需的密码const char *db,             --访问哪个库unsigned int port,          --访问的端口const char *unix_socket,    --域间套接字直接设为null                                              unsigned long client_flag); --标记为设为0返回:A MYSQL* connection handler if the connection was successful, NULL if the connection was unsuccessful. For a successful connection, the return value is the same as the value of the first argument.

四、下达指令

        连接成功后我们就可以利用相关语句执行我们的操作,由于select与其他操作不同所以分开描述

        准备测试表:

int mysql_query(MYSQL *mysql,const char *stmt_str)mysql是我们申请的mysql对象,stmt_str是我们要操作的sql语句返回:Zero for success. Nonzero if an error occurred.

        3.1增删改

                增加
    const char* sql = "insert into user values(1,'peter',18)";int n = mysql_query(mfp,sql);if(n == 0){std::cout << "query sucessed: " << sql << std::endl;}else{std::cerr << "query failed: " << mysql_error(mfp) << std::endl;return 1;}

编码格式

                删除

删除编码格式错误的数据

                修改

        3.2查询结果

若我们直接查发现并没有任何数据回显,显然直接query拿不到查询结果

为了拿到和命令行一样的数据显示,mysql提供了一块空间用来储存获取的结果,并通过一些函数获得数据

     

MYSQL_RES *mysql_store_result(MYSQL *mysql)
将结果放在MYSQL_RES *的结构体中返回:A pointer to a MYSQL_RES result structure with the results. NULL if the statement did not return a result set or an error occurred.搭配void mysql_free_result(MYSQL_RES *result)进行空间的获取与释放

上面代码仅成功把结果放在了res结构体中,但我们还要打印才能拿到数据

        结构体理解

对于上图结构体我们可以看到其中的字段均是指针类型,本质还是指向一个结构体

对于这种指向我们可以把它抽象成一个独特的二维数组进行理解,如图:

所以我们在打印数据时也可以利用行列数和[下标]进行数据访问

        打印属性
获取二维数组列数my_ulonglong mysql_num_fields(MYSQL_RES*res)获取列属性内容MYSQL_FIELD* mysql_fetch_fields(MYSQL_RES* res)
//打印列int field_count = mysql_num_fields(res);std::cout << "列数:" << field_count << std::endl;MYSQL_FIELD *field = mysql_fetch_fields(res);for(int i = 0; i < field_count; i++){std::cout << field[i].name << " ";}std::cout << std::endl;
        打印数据
获取二维数组行数
my_ulonglong mysql_num_rows(MYSQL_RES*res)获取内容
MYSQL_ROW * mysql_fetch_row(MYSQL_RES*res)
返回:一个数据结构体

//打印列int field_count = mysql_num_fields(res);int row_count = mysql_num_rows(res);std::cout << "行数:" << row_count << std::endl;std::cout << "列数:" << field_count << std::endl;MYSQL_FIELD *field = mysql_fetch_fields(res);for(int i = 0; i < field_count; i++){std::cout << field[i].name << " ";}std::cout << std::endl;//打印数据(行)for(int i = 0; i < row_count; i++){MYSQL_ROW row = mysql_fetch_row(res);for(int j = 0; j < field_count; j++){std::cout << row[j] << " ";}std::cout << std::endl;}

代码;

#include<iostream>
#include<mysql/mysql.h>const char*host = "localhost";
const char*user = "con";
const char*password = "123456";
const char*database = "conn";
const unsigned int port = 3306;int main()
{// std::cout << "mysql test : " << mysql_get_client_info() << std::endl;MYSQL* mfp = mysql_init(nullptr);if (mfp == nullptr) {std::cerr << "申请mysql对象失败" << std::endl;return 1;}std::cout << "申请成功" << std::endl;MYSQL* conn = mysql_real_connect(mfp, host, user, password, database, port, nullptr, 0);if(conn == nullptr){std::cerr << "连接数据库失败" << std::endl;return 1;}std::cout << "连接成功" << std::endl;// //测试看是否连接成功// while(true)// {}//执行sql语句//统一编码格式mysql_set_character_set(mfp, "utf8");// const char* sql = "insert into user values(1,'peter',18)";// const char* sql = "insert into user values(2,'jimmy',19)";// const char* sql = "insert into user values(3,'张三',20)";// const char* sql = "delete from user where id=3";// const char* sql = "update user set age=21 where id=2";const char* sql = "select * from user";int n = mysql_query(mfp,sql);if(n == 0){std::cout << "query sucessed: " << sql << std::endl;}else{std::cerr << "query failed: " << mysql_error(mfp) << std::endl;return 1;}//获取结果集MYSQL_RES* res = mysql_store_result(mfp);if(res == nullptr){std::cerr << "获取结果集失败" << std::endl;return 1;}std::cout << "获取结果集成功" << std::endl;//打印列int field_count = mysql_num_fields(res);int row_count = mysql_num_rows(res);std::cout << "行数:" << row_count << std::endl;std::cout << "列数:" << field_count << std::endl;MYSQL_FIELD *field = mysql_fetch_fields(res);for(int i = 0; i < field_count; i++){std::cout << field[i].name << " ";}std::cout << std::endl;//打印数据(行)for(int i = 0; i < row_count; i++){MYSQL_ROW row = mysql_fetch_row(res);for(int j = 0; j < field_count; j++){std::cout << row[j] << " ";}std::cout << std::endl;}mysql_free_result(res);mysql_close(mfp);return 0;
}

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

相关文章:

  • Flask项目中CSRF Token实现的解决方案
  • 使用 Kubernetes(k8s) 搭建 Redis 3 主 3 从集群教程
  • icejs状态管理store使用
  • Web开发 20
  • GPU计算效率提升:混合精度训练、并行优化、量化与VLLM实践
  • 做新闻类网站建站公司排名 软通
  • wordpress js 统计网站的seo是什么意思
  • 实用Excel学习资料包(含操作+函数+图表教程)
  • 开源AI智能名片链动2+1模式S2B2C商城小程序在公益课裂变法中的应用与影响研究
  • # vim中给变量添加双引号
  • wps word添加水印
  • 软考-系统架构设计师 应用程序与数据库的交互详细讲解
  • 改bug的一些体会
  • 安全对齐到底是什么
  • 专业VBA代码优化服务邀约‌,OFFICE excel计算优化,wrod报表生成
  • 织梦门户网站源码下载平面设计师的培训机构
  • 2025 AI 消费端变革:从生活助手到体验重构的全民浪潮
  • 【VUECLI】node.js打造自己的前端cli脚手架工具
  • 磁共振成像原理(理论)15:空间信息编码 (Spatial Information Encoding) -频率编码相位编码
  • 磐石网站seo手机nfc网站开发
  • 命名视图学习笔记
  • CentOS7安装OpenStack云计算平台框架
  • PyCharm中搭建PyTorch和YOLOv10开发环境
  • 无人机开源项目
  • 查看网站建设时间如何免费做网站优化
  • UNIX下C语言编程与实践8-UNIX 静态库原理与创建:ar 命令的使用与静态库调用全流程
  • MATLAB用到的符号计算数学引擎
  • 精读C++20设计模式——结构型设计模式:组合模式
  • 做网站费用怎么入账新洲城乡建设局网站
  • Windows系统安装arm麒麟系统