//打印错误信息?
#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__
?是一个非标准的宏,在许多编译器中并不支持。它被替换为编译时的时间戳。
该宏的作用是在输出日志时打印出当前源文件的文件名、所在行号和时间戳,以及传入的日志内容。
//与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
,该类提供了以下功能:
- 初始化和释放数据库连接。
- 连接数据库。
- 执行更新操作(insert, delete, update)。
- 执行查询操作(select)并返回结果集。
#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()
函数可以用于将格式化的数据转换为字符串,然后将字符串输出到一个缓冲区中。
#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;
}
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目录下执行
?查看结果