连接过程:
创建MySQL对象、初始化MySQL对象、连接数据库、增删改查操作、关闭数据库操作。
1、创建MySQL对象,并且初始化。在写代码的时候不要忘记验证代码是否成功,或者写防御性代码。
MYSQL* mysql = new MYSQL();
MYSQL* pDB = mysql_init(mysql);
2、连接数据库
pDB = mysql_real_connect(pDB, "localhost", "root", "123456", "mysql", 3306, NULL, 0);
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,除非你知道你要干什么,否则不要使用下面的内容:
- MySQL命令的执行
执行命令的过程:
- 发送SQL命令
- 获取SQL执行结果
- 解析获取到的结果
发送SQL命令接口:
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
q是SQL指令
length是指令的长度
向MySQL服务器发送SQL指令
获取SQL执行结果接口:
MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);
释放结果接口:
void STDCALL mysql_free_result(MYSQL_RES *result);
获取结果集列的数量:
unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);
获取结果集行的数量:
my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
取结果中的行接口:
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
获取每一行的长度接口:
unsigned long *STDCALL mysql_fetch_lengths(MYSQL_RES *result);
获取结果集中每一列的定义接口:
MYSQL_FIELD *STDCALL mysql_fetch_fields(MYSQL_RES *res);
MySQL如何创建数据仓库
CREATE DATABASE 数据仓库名;
数据库名称不要使用奇怪的或者特殊的符号,例如空格、路径符、引号
MySQL如何指派仓库权限给用户
GRANT 权限 ON databasename.tablename TO '用户名'@'范围'
删除库
DROP DATABASE 数据仓库名;
切换数据库
USE 数据仓库名;
部分代码参考
std::string sql = "CREATE DATABASE hello";//1.创建了一个hello的数据库
int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());
if (ret != 0) {
std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
}
MYSQL_RES* result = mysql_use_result(mysql);
if (result != NULL) {
show_result(result);
mysql_free_result(result);
}
//授权
sql = "GRANT ALL ON hello.* TO 'hello'@'localhost';";//2.给予权限到hello库到用户上面
ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());
if (ret != 0) {
std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
return -1;
}
result = mysql_use_result(mysql);
if (result != NULL) {
show_result(result);
mysql_free_result(result);
}
sql = "USE hello;";//3.切换到hello这个库
ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());
if (ret != 0) {
std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
return -1;
}
sql = "CREATE TABLE IF NOT EXISTS `hello` (`编号` NVARCHAR(16) PRIMARY KEY,";
sql += "`age` INT NOT NULL DEFAULT 18";
sql += ")ENGINE=InnoDB DEFAULT CHARSET=utf8;";
ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());
if (ret != 0) {
std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
return -1;
}
示例:

最后用完数据库之后不要忘记关闭并且delete掉在堆区创建的对象
本人才疏学浅,不足的地方请指正,希望对大家有所帮助

被折叠的 条评论
为什么被折叠?



