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

ubuntu下mysql数据库的安装

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

项目目录结构

数据库及表结构

public.h

//打印错误信息

cpp 复制代码
#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的连接已经操作

cpp 复制代码
#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

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

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

cpp 复制代码
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文件夹中编译

bash 复制代码
cmake ..
bash 复制代码
make

进入bin目录下执行

查看结果

相关推荐
在路上看风景9 小时前
19. 成员初始化列表和初始化对象
c++
zmzb01039 小时前
C++课后习题训练记录Day98
开发语言·c++
ccecw10 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH307310 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
念风零壹10 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
孞㐑¥11 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
MZ_ZXD00112 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
Goat恶霸詹姆斯12 小时前
mysql常用语句
数据库·mysql·oracle
A星空12313 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫14 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发