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

做网站有必要?酒庄企业网站

做网站有必要?,酒庄企业网站,新手学做网站pdf,网站制作实验报告从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库#xff0c;里面预先创建了一个database名叫chat#xff0c;用户名root#xff0c;密码password。 1.2 Visual Studio预操作 在Windows上使用…从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库里面预先创建了一个database名叫chat用户名root密码password。 1.2 Visual Studio预操作 在Windows上使用VS需要加一些路径之类的这样才可以使用MySQL C API。否则无法找到mysql.h无法正常链接dll、lib无法编译。 1.下载MySQL Connector/C 2.配置包含目录和库目录 “C/C” - “常规” - “附加包含目录”添加MySQL Connector/C的include目录。 “链接器” - “常规” - “附加库目录”添加MySQL Connector/C的lib目录。 3.配置链接库 在“链接器” - “输入” - “附加依赖项”添加以下库文件 libmysql.libMySQL C API的静态库。 mysqlclient.libMySQL C API的动态链接库。 4.拷贝运行时依赖项 将MySQL Connector/C的bin目录添加到系统的PATH环境变量中并将libmysql.dll文件复制到vcxproj文件所在的目录。 1.3 简单查询程序 1.下面是一个单线程的程序所有的数据库连接和查询都是在主线程中执行的。里面可能有一些不安全的操作方便理解没有管比如close函数里传nullptr是不安全的NULL最好改成nullptr便于与0值区分等。 2.mysql.h声明了MYSQL、MYSQL_ROW、MYSQL_RES等结构体和一些mysql_init这样的函数必须包含这个头文件编译才不会出错。 从https://dev.mysql.com/doc/c-api/8.0/en/c-api-basic-function-reference.html摘了一些出来可跳转链接看具体的接口参数 结构体 函数接口 #include iostream #include mysql.h // 假设使用MySQL数据库int main() {// 步骤1建立数据库连接MYSQL* conn mysql_init(NULL);if (conn NULL) {std::cerr Failed to initialize MySQL connection. std::endl;return -1;}if (mysql_real_connect(conn, localhost, root, password, chat, 0, NULL, 0) NULL) {std::cerr Failed to connect to MySQL database. std::endl;mysql_close(conn);return -1;}// 步骤2执行SQL查询const char* query SELECT * FROM user;if (mysql_query(conn, query) ! 0) {std::cerr Failed to execute SQL query. std::endl;mysql_close(conn);return -1;}MYSQL_RES* result mysql_store_result(conn);if (result NULL) {std::cerr Failed to store MySQL result. std::endl;mysql_close(conn);return -1;}// 处理查询结果MYSQL_ROW row;while ((row mysql_fetch_row(result)) ! NULL) {// 处理每一行的数据std::cout Column 1: row[0] , Column 2: row[1] std::endl;}// 释放查询结果mysql_free_result(result);// 步骤3断开数据库连接mysql_close(conn);return 0; } 2.将上述API查询封装到类里调用自己的函数查询 上面的代码主要是用到了mysql_init,mysql_real_connect,mysql_query,mysql_store_result,mysql_free_result,mysql_close这些mysql.h里声明的一些函数。如果我们想用这些函数进行对MYSQL数据库内数据的操作用的是MYSQL*类型的指针conn进行操作。 首先MYSQL* conn mysql_init(NULL);也即真正malloc了一个空间分配和初始化了一个 MYSQL 结构体实例并返回指向该实例的指针conn。这个实例用于存储数据库连接所需的所有信息。mysql_real_connect 函数建立实际的数据库连接并使用 MYSQL 结构体来保存连接的详细信息。之后无论是查询mysql_query、获取结果mysql_store_result还是关闭连接mysql_close都需要使用这个 MYSQL* 类型的指针。这是因为所有这些操作都是在特定的数据库连接会话上执行的而 conn 指针正是指向这个会话的。 那么在此基础之上我们可以将这些函数进一步的封装用一个类中的成员函数去分别调用它们。具体而言我们自己定义一个Connection类里面放一个私有成员对象MYSQL* _conn指针以及构造、析构、连接、更新、查询函数而这些函数又分别调用了初始的mysql_init,mysql_real_connect,mysql_query,mysql_store_result,mysql_free_result,mysql_close这些mysql.h里声明的一些函数调用的参数是初始函数所需的参数加上conn指针。在我们自己实现的函数里还可以额外加一些LOG语句。当我们对这个类进行实例化的时候用类实例.成员函数()就可以真正对数据库进行增删改查。 代码分为4个文件Connection.h、Connection.cpp、main.cpp以及最简单的日志打印仅仅使用了一个宏而未用到任何日志库。里面把之前的store换成了use这样可以减轻内存的使用直接按行输出而不用保存。 Connection.cpp: // 实现对数据库的增删改查 #pragma once #include iostream #include Connection.h #include public.h//构造函数 mysql_init 函数用于初始化一个新的 MYSQL 结构体实例。这是建立数据库连接之前的准备步骤。 //分配并初始化一个新的 MYSQL 结构体返回一个指向这个新结构体的指针如果分配失败返回 NULL。 Connection::Connection() {_conn mysql_init(nullptr); }//真正的连接 bool Connection::connect(string ip, string user, string password, string dbname, unsigned short port) {MYSQL* p mysql_real_connect(_conn,ip.c_str(), user.c_str(), password.c_str(), dbname.c_str(), port, nullptr, 0);//.c_str() :将string转换为 const char* 类型return p ! nullptr; }//增删改只要返回bool的一些操作 bool Connection::update(string sql) {if (mysql_query(_conn, sql.c_str())) {//当 mysql_query() 返回 0 时表示查询语句成功执行LOG(更新失败 sql);return false;}return true; }//查并返回结果实际上就是存 MYSQL_RES* Connection::query(string sql) {if (mysql_query(_conn, sql.c_str())) {LOG(查询失败 sql);return nullptr;}return mysql_use_result(_conn); }//析构函数关闭连接 Connection::~Connection() {if (_conn ! nullptr)mysql_close(_conn); } Connection.h: // 实现对数据库的增删改查 #pragma once #include mysql.h #include string using namespace std;class Connection { public:Connection();~Connection(); //析构函数关闭连接bool connect(string ip, string user, string password, string dbname, unsigned short port); //真正的连接bool update(string sql); //增删改只要返回bool的一些操作MYSQL_RES* query(string sql); //查并返回结果实际上就是存private:MYSQL* _conn; };public.h: #pragma once #define LOG(str)\cout__FILE__:__LINE__ __TIMESTAMP__:strendl;main: #include Connection.hint main() {Connection conn;conn.connect(localhost, root, password, chat, 3306);string sql insert into user (name, age, sex) values (zhang san ,18, male);;conn.update(sql); //这里没有测试queryreturn 0; }可以发现原本chat database里面user表里没有数据的执行了该程序之后成功插入了一行数据。并且id一开始设置成了自增字段就没有手动指定只插入了(name, age, sex)它会自动从1开始填。
http://www.pierceye.com/news/842816/

相关文章:

  • seo蒙牛伊利企业网站专业性诊断.win域名做网站怎么样
  • 微信、网站提成方案点做网站建设当中的技术解决方案
  • 云南省住房和城乡建设厅官方网站网站哪里可以查到做ddos
  • 爱情动做网站推荐个人养老保险金怎么交
  • 淘客怎么做自己的网站演示动画制作免费网站
  • 哪个网站可以搭建网页百度指数官网入口
  • 济南网站开发设计wordpress. 外贸seo
  • 深圳网站建设优化织梦 蝉知 wordpress
  • 荥阳郑州网站建设wordpress oauth2插件
  • 做传媒网站公司简介企业手机网站源码
  • 一级A做爰片安全网站济南营销型网站制作
  • 网站规划说明书范文17素材网官网
  • 青岛做网站大公司免费的行情网站app网页推荐
  • 产品网站建设多少钱哪些网站做推广效果好
  • 网站开发所需技能外链网
  • 广州做家教的网站临沂哪里有做网站
  • 网站建设介绍会发言稿网站开发主页
  • 做推广赚钱的网站如何制作网站策划书
  • 微信公众号商城网站开发能不能不用虚拟主机建设网站
  • iis 网站目录权限vps网站无法通过ip访问
  • 重庆关键词优化咸阳seo培训
  • 专业网站建设分类标准嘉兴网络项目建站公司
  • 做婚礼网站的公司简介网页打不开怎么办页面无法显示
  • 怎么套用模板做网站白嫖二级域名
  • 网站如何进行备案建立平台的步骤
  • 济南免费网站建设网站用什么软件编写
  • 网站如何注册微信公众平台 类型站长要维护网站
  • 美食类网站模板有的网站为什么打不开怎么回事
  • 平面设计网站导航1万元可以注册公司吗
  • 做网站接口多少钱怎样做旅游网站