C++ 访问数据库

4 篇文章 0 订阅

环境
根据mysql的安装位数,选择visual studio的平台,现在一般都是X64的。


工程->属性->C/C++常规->附加包含目录中粘贴上mysql包的路径

工程->属性->链接器->常规->附加库目录中也粘贴上mysql链接库的路径

 工程->属性->链接器->输入->附加依赖项末尾添上libmysql.lib,记得用;隔开

 最后将libmysql.dll文件粘贴到工程目录文件夹下

 环境搭建完成。
创建一个.h文件,写一个connect的类。小小的封装一下,就先满足这些基本的操作

#include<string>
#include<mysql.h>
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释放。
 

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值