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;