C++ 访问数据库

C++ 访问数据库,第1张

环境:
根据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释放。



 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/634724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-16
下一篇 2022-04-16

发表评论

登录后才能评论

评论列表(0条)

保存