参数: 

  • 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。

代码示例:

代码语言:javascript

AI代码解释

#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。

代码示例:

代码语言:javascript

AI代码解释

mysql_set_character_set(mysql,"utf8");

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


选择需要操作的数据库

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

代码语言:javascript

AI代码解释

mysql_select_db(mysql,"conn");

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


执行sql语句(增删改查)

使用

int mysql_query(MYSQL*, const char*)

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

以增为例,如下:

代码语言:javascript

AI代码解释

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*的二维数组

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐