数据库交互一般流程:
-
初始化
- mysql_init()
函数声明:MYSQL *mysql_init(MYSQL *mysql)
功能描述:为mysql_real_connect()
分配或初始化一个MYSQL 对象
返回:一个初始化的 MYSQL* handler - mysql_real_connect()
函数声明:MYSQL *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 client_flag)
功能描述:建立数据库连接。host、user、passwd、db、port分别是要连接的数据库ip、用户名、密码、数据库名、端口。host参数如果是NULL
或"localhost"
,代表连接的是本机。最后两个参数一般是NULL
和0
返回:如果连接成功,返回一个 MYSQL* connection handler,否则返回NULL
- mysql_init()
-
发出语句并处理
-
处理一条语句:mysql_query()
函数声明:int mysql_query(MYSQL *mysql, const char *stmt_str)
返回:0(执行成功)
-
-
结果处理
-
mysql_store_result()
函数声明:MYSQL_RES *mysql_store_result(MYSQL *mysql)
功能描述:存储query语句返回的结果集
返回:指向结果集的指针。如果没有结果集返回或引发异常,则返回NULL -
mysql_fetch_row()
函数声明:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
功能描述:检索结果集的下一行
返回: 下一行的MYSQL_ROW
结构或NULL
用在mysql_store_result()
后面,返回NULL表示没有可检索的下一行;
用在mysql_use_result()
后面,返回NULL表示没有可检索的下一行或有错误出现。 -
mysql_num_fields()
函数声明:unsigned int mysql_num_fields(MYSQL_RES *result)
功能描述:返回结果集的列数
-
-
释放资源并关闭数据库连接
mysql_free_result(res); //释放一个结果集使用的内存。 mysql_close(&mysql); //关闭一个服务器连接。
Example:
#include<iostream>
#include<mysql.h>
using namespace std;
MYSQL mysql;
MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
bool ConnectDatabase()//连接数据库
{
//初始化mysql
mysql_init(&mysql); //连接mysql,数据库 //初始化一个MySQL结构
const char host[] = "localhost"; //主机名
const char user[] = "root"; //用户名
const char psw[] = "123456";
const char db[] = "video"; //数据库名
const int port = 3306; //端口名
//返回false则连接失败,返回true则连接成功
if (!(mysql_real_connect(&mysql, host, user, psw, db, port, NULL, 0)))
//中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
return false;
else
return true;
}
void FreeConnect()//释放资源并关闭数据库连接
{
mysql_free_result(res);
mysql_close(&mysql);
}
int main()
{
if (ConnectDatabase()){
cout << "数据库连接成功" << endl;
}
else
return -1;
string query = "show tables;";
if (!(mysql_query(&mysql, query.c_str())))
cout << "查询成功" << endl;
else
return -1;
res = mysql_store_result(&mysql);//获取结果集
int num = mysql_num_fields(res);//获取结果集的列数
cout << "数据有 " << num << " 列" << endl;
MYSQL_ROW row;
while (row = mysql_fetch_row(res))//获取结果集每一行数据
cout << row[0] << endl;//因为结果集只有1列,这边只显示row[0]
system("pause");
}
另一个编程例子请移步MySQL小试——数据库检索小案例。