【MySQL】使用C++连接数据库

这篇具有很好参考价值的文章主要介绍了【MySQL】使用C++连接数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前置工作

  1. 创建数据库并选中
mysql> create database conn;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| conn               |
+--------------------+
2 rows in set (0.00 sec)

mysql> use conn
Database changed
  1. 创建表并描述表结构
mysql> create table user( id int primary key auto_increment, name varchar(32) not null, age int not null, telphone varchar(32) unique);
Query OK, 0 rows affected (0.06 sec)

mysql> show tables;
+----------------+
| Tables_in_conn |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql> desc user;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(32) | NO   |     | NULL    |                |
| age      | int(11)     | NO   |     | NULL    |                |
| telphone | varchar(32) | YES  | UNI | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

代码

#include <iostream>
#include <string>
#include <mysql/mysql.h>

const std::string host = "127.0.0.1";
const std::string user = "connector";
const std::string password = "123456";
const std::string db = "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(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
    {
        std::cerr << " connect MYSQL error" << std::endl;
        return 2;
    }
    mysql_set_character_set(my, "utf8");
    // std::cout<<"connect success "<<std::endl;
    // std::string sql="insert into user(name,age,telphone) values('jim',18,'123488899');";
     std::string sql="update user set name='李四' where id =2;";
    // std::string sql = "delete from user where id =3; ";
    //std::string sql = "select * from user";
    int n = mysql_query(my, sql.c_str());
    if (n == 0)
        std::cout << sql << " success " << std::endl;
    else
    {
        std::cerr << "filed :" << sql << std::endl;
        return 3;
    }
    mysql_close(my);
    return 0;
}
  1. 增加删除修改均可正常执行,查询较为复杂,整体代码中有案例
  2. 如果查询则需要把查询数据保存到结果集,通过mysql所提供的函数 得到行和列,遍历得到结果。

常用函数接口

  1. 初始化mysql并返回句柄(默认传入nullptr即可)
MYSQL *mysql_init(MYSQL *mysql);

如: MYSQL *mfp = mysql_init(nullptr)

  1. 链接数据库
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 clientflag);

所需参数分别是 mysql句柄 ,主机ip,sql用户名,sql密码,数据库,端口号,剩余两个填nullptr和0即可
如:

if(mysql_real_connect(my,host.c_str(),user.c_str(),password.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
{
   std::cerr << " connect MYSQL error" << std::endl;
   return 2;
}
  1. 设置字符集编码
mysql_set_character_set(myfd, "utf8");
  1. 执行sql语句
int mysql_query(MYSQL *mysql, const char *q);
  1. 获取查询结果并保存到结果集
MYSQL_RES *mysql_store_result(MYSQL *mysql);

如:

    //把结果存到结果集中
    MYSQL_RES *res = mysql_store_result(my);
    if (nullptr == res)
    {
        std::cerr << " mysql_store_result error" << std::endl;
        return 4;
    }
  • 获取结果行数mysql_num_rows
my_ulonglong mysql_num_rows(MYSQL_RES *res);
  • 获取结果列数mysql_num_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
  • 获取列名mysql_fetch_fields
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

如:

  my_ulonglong row = mysql_num_rows(res);
    my_ulonglong col = mysql_num_fields(res);
    std::cout << "行: " << row << std::endl;
    std::cout << "列: " << col << std::endl;
    std::cout<<std::endl;

    //属性
    MYSQL_FIELD* fields=mysql_fetch_fields(res);
    for(int i=0;i<col;++i)
    {
        std::cout<< fields[i].name<<"\t";
    }
    std::cout<<std::endl;
  • 获取结果内容mysql_fetch_row
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

如:文章来源地址https://www.toymoban.com/news/detail-641967.html

  //内容
    for (int i = 0; i < row; ++i)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for (int j = 0; j < col; ++j)
        {
            std::cout << row[j] << "\t";
        }
        std::cout << "\n";
    }
    std::cout<<fields[0].db<<std::endl;
    std::cout<<fields[0].table<<std::endl;

  1. 释放结果集
 void mysql_free_result(MYSQL_RES *result)
  1. 关闭mysql连接
void mysql_close(MYSQL *sock);

整体示例:

#include <iostream>
#include <string>
#include <mysql/mysql.h>

const std::string host = "127.0.0.1";
const std::string user = "connector";
const std::string password = "123456";
const std::string db = "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(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
    {
        std::cerr << " connect MYSQL error" << std::endl;
        return 2;
    }
    mysql_set_character_set(my, "utf8");
    // std::cout<<"connect success "<<std::endl;
    // std::string sql="insert into user(name,age,telphone) values('jim',18,'123488899');";
    // std::string sql="update user set name='李四' where id =2;";
    // std::string sql = "delete from user where id =3; ";
    std::string sql = "select * from user";
    int n = mysql_query(my, sql.c_str());
    if (n == 0)
        std::cout << sql << " success " << std::endl;
    else
    {
        std::cerr << "filed :" << sql << std::endl;
        return 3;
    }
    //把结果存到结果集中
    MYSQL_RES *res = mysql_store_result(my);
    if (nullptr == res)
    {
        std::cerr << " mysql_store_result error" << std::endl;
        return 4;
    }
    my_ulonglong row = mysql_num_rows(res);
    my_ulonglong col = mysql_num_fields(res);
    std::cout << "行: " << row << std::endl;
    std::cout << "列: " << col << std::endl;
    std::cout<<std::endl;

    //属性
    MYSQL_FIELD* fields=mysql_fetch_fields(res);
    for(int i=0;i<col;++i)
    {
        std::cout<< fields[i].name<<"\t";
    }
    std::cout<<std::endl;

    //内容
    for (int i = 0; i < row; ++i)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for (int j = 0; j < col; ++j)
        {
            std::cout << row[j] << "\t";
        }
        std::cout << "\n";
    }
    std::cout<<fields[0].db<<std::endl;
    std::cout<<fields[0].table<<std::endl;

    mysql_free_result(res);
    mysql_close(my);
    return 0;
}

到了这里,关于【MySQL】使用C++连接数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】使用DBeaver数据库管理工具进行MySQL数据库连接

    一、数据库连接信息填写 1、服务器地址:填写服务器部署的地址,以及端口号 2、数据库:sys 3、用户名:root 4、密码:服务器上面设置的具体密码 以上信息填写错误的报错提示 :Access denied for user ‘XXX’@’%’ to database ‘10.42.67.22’ 二、数据库说明 1、数据库连接时选择的

    2024年02月09日
    浏览(91)
  • 使用python连接mysql数据库

    第一章 Python 机器学习入门之连接mysql数据库 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 在控制台输入如下: 代码如下(示例): 演示

    2024年02月16日
    浏览(68)
  • 使用eclipse连接mysql数据库步骤

    1.导入连接MySQL数据库驱动包(例如mysql-connector-java-5.1.7-bin.jar),并测试。 步骤: 1)在eclipse里面点击右上角的图标,如下图所示。 2)选中Database Connections右键,点new。 3)选择MySQL,点击next。 4)如图所示: 2.引用MySQL驱动包jar 在项目右键一个文件夹lib,把驱动包复制进去,

    2024年02月11日
    浏览(68)
  • 使用C#连接MySQL数据库(详解)

    ✨前言✨ 本片文章,主要在于C#连接MySQL数据库,由于这之间无法建立直接联系,这时候就涉及到了第三方连接工具.NET,以此来建立C#与MySQL数据库的连接 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留

    2024年02月05日
    浏览(69)
  • 【MySQL】如何使用Unix Sockets 协议连接MySQL数据库

    MySQL入门02:关于MySQL连接的ABC 【MySQL】如何使用Named Pipe协议(Windows)连接MySQL数据库 【MySQL】如何使用Shared-memory协议(Windows)连接MySQL数据库 【MySQL】如何使用Unix Sockets 协议连接MySQL数据库 【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术

    2024年02月11日
    浏览(46)
  • uniapp使用express连接mysql数据库

    使用win+R再输入cmd打开命令提示符,输入如下内容全局安装脚手架 npm i express-generator -g 可以在命令提示符中cd到自己项目的根目录下,也可以在HBuilder X里内置的终端运行代码  C:HBuilderProjectswordman express --view=ejs server 说明:前面是项目的根目录,express --view=ejs projectName proje

    2024年02月06日
    浏览(121)
  • 使用 Next.js 连接 mysql 数据库

    本文主要为大家介绍,如何使用 Next 框架实现一个简单的 后端接口 ,并且从 数据库 中请求数据返回给前端。 项目创建完成后在 app 文件下新建api文件夹,在 api 文件夹下新建 getData 文件夹,在 getData 文件夹下新建 route.js,这里面用于存储我们的接口信息,如下 注意: 在

    2024年02月22日
    浏览(64)
  • Navicat (连接mysql数据库)的基本使用

    目录 前言 一、navicat-15的下载安装 二、navicat连接数据库 1、登录 2、连接数据库失败情况 3、登录数据库需要授权 三、navicat的基础操作  ☆ 1、数据库的基本操作 2、对表进行操作 3、sql 语句管理数据库  4、用户管理 5、 视图的创建 6、表的导入与导出  7、数据库的备份 

    2024年02月04日
    浏览(63)
  • 【MySQL系列】使用C语言来连接数据库

    ☕导航小助手☕      🍚 写在前面           🥡 一、准备工作                🧇🧇 1.1 把 libmysql.dll 和 libmysql.lib 文件复制到工程目录下                🍞🍞 1.2 添加 libmysql.lib                 🦪🦪 1.3 添加 include目录                🍔🍔 1.4 包含头文件    

    2024年02月04日
    浏览(55)
  • 实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库

      C++ 是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库。以下是一些示例代码,演示如何使用 C++ 连接 SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库。 连接 SQL Server 数据库 要使用 C++ 连接 SQL Server 数据库,可以使用 Microsoft 的 ADODB 库。以

    2024年02月05日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包