环境:
根据mysql的安装位数,选择visual studio的平台,现在一般都是X64的。
工程->属性->C/C++常规->附加包含目录中粘贴上mysql包的路径
工程->属性->链接器->常规->附加库目录中也粘贴上mysql链接库的路径
工程->属性->链接器->输入->附加依赖项末尾添上libmysql.lib,记得用;隔开
最后将libmysql.dll文件粘贴到工程目录文件夹下
环境搭建完成。
创建一个.h文件,写一个connect的类。
小小的封装一下,就先满足这些基本的 *** 作
#include
#include
using namespace std;
/*
实现mysql数据库的增删改查
*/
class Connection {
public:
//构造
Connection();
//析构
~Connection();
bool connect(string ip,unsigned short port,string username,string password,string dbname);
//更新 *** 作
bool update(string sql);
//查询 *** 作
MYSQL_RES* query(string sql);
private:
MYSQL * _conn; // 表示和mysql的一条连接
};
创建一个.cpp文件实现一下。
构造函数
Connection::Connection() {
_conn = mysql_init(nullptr);
}
mysql_init(nullptr)初始化一个MYSQL连接的实例化对象,
MYSQL* _conn = mysql_init(nullptr);
MYSQL是一个结构体模板。
析构函数
Connection::~Connection() {
if (_conn!=nullptr) {
mysql_close(_conn);
}
与mysql服务器创建连接
bool Connection::connect(string ip, unsigned short port, string username, string password, string dbname) {
MYSQL* p = mysql_real_connect(_conn, ip.c_str(), username.c_str(), password.c_str(), dbname.c_str(), port, nullptr, 0);
return p != nullptr;
}
mysql_real_connect的函数原型
MYSQL *mysql_real_connect (
MYSQL *mysql, //创建的连接实例对象,这是一个传出参数
const char *host, //ip地址,本地连接可以写localhost或NULL
const char *user, //用户名,默认用户名为root
const char *passwd,//windows系统为登录数据库的密码,linux系统中root账户没有密码,null
const char *db, //数据库名字
unsigned int port, //端口号windows系统默认3306
const char *unix_socket, //常设为null
unsigned long client_flag)//常设为0
如果连接成功,返回MYSQL*连接句柄。
如果连接失败,返回NULL。
对于成功的连接,返回值与第1个参数的值相同。
更新 *** 作
//更新 *** 作,insert,delete,update
bool Connection::update(string sql) {
if (mysql_query(_conn, sql.c_str())) {
LOG("更新失败:" + sql);
return false;
}
return true;
}
mysql_query(
MYSQL* _conn, //与数据库连接的实例
char* sql, //因为是C接口的所以需要转换一下string :sql.c_str(),sql中就是要执行的数据库语言代码
)
mysql_query函数的返回值很奇怪,经过测试在if语句中如果执行成功会返回false,执行失败会返回true,这一块还得研究一下
查询 *** 作
MYSQL_RES* Connection::query(string sql) {
//查询 *** 作 select
if (mysql_query(_conn, sql.c_str())) {
LOG("查询失败" + sql);
return nullptr;
}
return mysql_use_result(_conn);
}
函数原型
MYSQL_RES *mysql_use_result(MYSQL *mysql)
对于每个可以产生一个结果集的命令(比如select、show、describe, explain, check_table等等),发起mysql_query或者mysql_real_query之后,你都需要调用mysql_store_result或者mysql_use_result语句,处理完结果集后需要使用mysql_free_result释放。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)