c++ mysql数据库编程(linux系统)

ubuntu下mysql数据库的安装

ubuntu安装mysql(图文详解)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_58158950/article/details/135667062?spm=1001.2014.3001.5501

项目目录结构

数据库及表结构

public.h

//打印错误信息 

#ifndef PUBLIC_h
#define PUBLIC_H

#include<iostream>
using namespace std;

// 打印源文件的文件名、所造行号和时间戳
#define LOG(str)
    cout<<__FILE__<<":"<<__LINE__<<" "<<
    __TIMESTAMP__<<" : "<<str<<endl;

#endif

这段代码是一个宏定义,它定义了一个名为 LOG 的宏。

  • __FILE__ 是一个预定义宏,它会在编译时被替换为当前源文件的文件名(包括路径)。
  • __LINE__ 也是一个预定义宏,它会在编译时被替换为当前代码所在的行号。
  • __TIMESTAMP__ 是一个非标准的宏,在许多编译器中并不支持。它被替换为编译时的时间戳。

该宏的作用是在输出日志时打印出当前源文件的文件名、所在行号和时间戳,以及传入的日志内容。

MySqlConn.hpp 

//与mysql进行交互的类,包括mysql的连接已经操作

#ifndef MYSQLCONN_H
#define MYSQLCONN_H
#include<string>
#include "mysql/mysql.h"

class MySqlConn
{
public:
    //初始化数据库连接
    MySqlConn();
    //释放数据库连接
    ~MySqlConn();

    //连接数据库
    bool connection(string ip,unsigned short port,string user,string passwd,string dbname);
    // bool connection();

    //更新操作,insert,delete,update
    bool update(string sql);
    //查询操作
    MYSQL_RES* query(string sql);

private:
    MYSQL *_conn;
};
#endif

这段代码实现了一个 MySQL 数据库连接的封装类 MySqlConn,该类提供了以下功能:

  1. 初始化和释放数据库连接。
  2. 连接数据库。
  3. 执行更新操作(insert, delete, update)。
  4. 执行查询操作(select)并返回结果集。

MySqlConn.cpp 

#include "public.h"
#include "MySqlConn.hpp"

//初始化数据库连接
MySqlConn::MySqlConn()
{
    //初始化数据库连接
    _conn=mysql_init(nullptr);
}
//释放数据库连接
MySqlConn::~MySqlConn()
{
    if(_conn!=nullptr)
    {
        mysql_close(_conn);
    }
}

//连接数据库
// bool MySqlConn::connection()
bool MySqlConn::connection(string ip,unsigned short port,string user,string passwd,string dbname)
{
    MYSQL* p=mysql_real_connect(
        _conn,//数据库连接
        //mysql数据库内部使用c风格的字符串,需要使用c_str()函数将string类型字符串进行转换
        ip.c_str(),//ip地址
        user.c_str(),//用户名
        passwd.c_str(),//密码
        dbname.c_str(),//数据库名称
        port,//mysql端口号
        nullptr,0
    );

    if(p)
    {
        mysql_query(_conn,"SET NAME UTF8");
        // mysql_options(_conn, MYSQL_SET_CHARSET_NAME, "gb2312");
    }

    LOG("数据库连接成功!");
    return p;
}

//更新操作
bool MySqlConn::update(string sql)
{
    //insert,delete,update
    if(mysql_query(_conn,sql.c_str()))
    {
        LOG("更新失败:"+sql);
        const char* errorMsg = mysql_error(_conn);
        LOG("错误信息:" + string(errorMsg));
        return false;
    }
    return true;
}
//查询操作,select
MYSQL_RES* MySqlConn::query(string sql)
{
    if(mysql_query(_conn,sql.c_str()))
    {
        LOG("查询失败:"+sql);
        LOG("错误信息:" + string(mysql_error(_conn)));
        return nullptr;
    }
    return mysql_use_result(_conn);
}

sprintf() 函数是 C 语言标准库中的一个格式化输出函数,它的原型如下:

int sprintf(char *str, const char *format, ...);

sprintf() 函数的作用是将格式化的字符串输出到指定的字符数组 str。它的参数与 printf() 函数类似,第二个参数 format 是格式化字符串,后面的可变参数则是要输出的数据。

sprintf() 返回输出的字符数,如果出错,则返回一个负数。

sprintf() 函数可以用于将格式化的数据转换为字符串,然后将字符串输出到一个缓冲区中。

main.cpp

#include<iostream>
#include"public.h"
#include"MySqlConn.hpp"
using namespace std;

int main()
{
    // LOG("this is log msg!!!");
    string ip = "127.0.0.1";
    string user = "root";
    string passwd = "123456";
    string dbname = "chat";

    MySqlConn conn;//创建mysql对象
    //定义sql语句
    char sql[1024]={0};
    sprintf(sql,
            "insert into user(name,age,sex) values('%s',%d,'%s')",
            "jack",20,"male");
    //连接数据库
    conn.connection(ip,3306,user,passwd,dbname);
    //执行sql
    conn.update(sql);
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(mysql)

# 编译配置选项
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}  -g)

# 配置可执行文件的生成路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

aux_source_directory(. SRC_LIST)

add_executable(mysqltest ${SRC_LIST})
target_link_libraries(mysqltest mysqlclient)

进入build文件夹中编译

cmake ..
make

进入bin目录下执行

 查看结果