MySQL&C++快速上手(二)数据库的连接

50 阅读2分钟

MySQL数据库连接过程

  • 创建 MYSQL 对象
  • 初始化 MYSQL 对象
  • 连接数据库
  • 增删改查超作
  • 关闭数据库操作

初始化 MYSQL 对象函数,必须最先调用该函数。

MYSQL *STDCALL mysql_init(MYSQL *mysql);

连接数据库函数

MYSQL *STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
									const char *user, const char *passwd,
									const char *db, unsigned int port,
									const char *unix_socket,
									unsigned long clientflag);

参数: mysql:初始化过的 MYSQL 对象 host:服务器地址[ip、localhost、域名] user:连接服务器所使用的用户 passwd:用户对于的密码 db:连接服务器时所使用的库,如果为空,则使用默认数据库 mysql port:连接服务器所用的端口,默认是 3306,具体依据数据库来定 unix_socket:unix 套接字连接方式,一般是指本地管道或者本地套接字,如果没有设为 NULL clientflag:一般情况下为 0,除非你知道你要干什么,否则不要使用下面的内容: CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS 客户端可以处理过期的密码 CLIENT_COMPRESS 在协议中进行数据压缩 CLIENT_FOUND_ROWS 返回匹配的结果,而非更改的结果 CLIENT_IGNORE_SIGPIPE 抑制管道信号的处理,防止与已有的管道信号处理冲突 CLIENT_IGNORE_SPACE 允许函数名称后面的空格 CLIENT_INTERACTIVE 使用 interactive_timeout 来设置超时时间,而不是通过 wait_timeout 函 数来得知超时 CLIENT_LOCAL_FILES 允许加载本地数据处理 CLIENT_MULTI_STATEMENTS 告诉服务器客户端可能发送多个 statements CLIENT_NO_SCHEMA 不允许 db_name.tbl_name.col_name 这样的语法(用于兼容 ODBC) CLIENT_ODBC 没有用了(以前兼容 odbc 用的) CLIENT_OPTIONAL_RESULTSET_METADATA 针对高频而短小的查询优化(但是可能导致其他问 题) CLIENT_SSL 使用加密协议。官方不建议使用,最好使用 mysql_options() 或者 mysql_ssl_set() 来替换。 CLIENT_REMEMBER_OPTIONS 这个是为了方便 connect 失败后,重新连接的时候用的。如果 有这个,options 设置一次后,如果失败,可以直接使用 connect,而不必再次调用 options

代码范例:

// 创建MYSQL对象
MYSQL* mysql = new MYSQL();

// 初始化
MYSQL* pDB = mysql_init(mysql);
if (pDB == NULL) {
	std::cout << "mysql_init failed!" << std::endl;
	return -1;
}

// 连接
pDB = mysql_real_connect(pDB, "localhost", "root", "FengPan12#$56", "mysql", 3306, NULL,
0);
std::cout << pDB << std::endl;
if (pDB) {
	// TODO: 执行增删改查一系列操作
	std::string sql = "";
	int ret = mysql_real_query(pDB, sql.c_str(), sql.size());
	if (ret != 0) {
	std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
	}
	
	// 执行结束 关闭数据库
	mysql_close(pDB);
}

// 释放对象
delete mysql;