数据库_之电商API
MySQL C API 使用(基本函数)
Mysql C API函数详解
MySQL的常用API
一个常用的程序调用MySQL数据库的时候通常都会调用以下API,下面来逐个分析.
-
mysql_init()
//函数原型 MYSQL *STDCALL mysql_init(MYSQL *mysql);
这个
API
主要是用来分配或初始化一个MySQL
对象,用来连接MySQL服务端; 返回值是MYSQL *
; 参数MYSQL *mysql
是指定一个MYSQL
对象. -
mysql_options()
//函数原型 int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg);
此
API
可用于设置额外的连接选项,并影响连接的行为.本函数可多次调用来设置数个选项; 参数MYSQL *mysql
是指定一个MYSQL
对象; 参数enum mysql_option option
是供调用者选择填写的连接选项; 参数const void *arg
是结合上一个参数填写的连接选项的值.关于连接选项的填写,可以参考 mysql_options()函数
-
mysql_real_connect()
//函数原型 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);
这个
API
主要是用来分配或初始化一个MySQL
对象,用来连接MySQL
服务端. 参数MYSQL *mysql
是指定一个MYSQL
对象,此处为mysql_init
函数返回的指针; 参数const char *host
指定主机地址; 参数const char *user
指定mysql
用户名; 参数const char *passwd
输入该用户名的密码; 参数const char *db
指定数据库,当该值为空时链接到默认的数据库; 参数unsigned int port
指定端口; 参数const char *unix_socket
指定使用unix链接方式,为空时表明不适用socket
或管道机制; 参数unsigned long clientflag
通常设置为0. -
mysql_query()
//函数原型 int STDCALL mysql_query(MYSQL *mysql, const char *q);
此
API
是最常用的,增删查改都使用到它,query
英文意思是查询,但这里表示执行
. 参数MYSQL *mysql
是指定一个MYSQL
对象. 参数const char *
输入一个SQL
语句. -
mysql_store_result()
//函数原型 MYSQL_RES *STDCALL mysql_store_result(MYSQL *mysql);
获取结果集,通常是搭配
mysql_query
这个API
来使用,查询上一条SQL
语句返回的结果. 参数MYSQL *mysql
是指定一个MYSQL
对象 返回值MYSQL_RES
是一个句柄,可以使用mysql_fetch_row
取出这个结果集里头有多少行数据. -
mysql_use_result()
//函数原型 MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);
这个
API
是在调用一个可以产生结果集的命令之后,搭配本函数使用获取该结果集; 参数MYSQL *mysql
是指定一个MYSQL
对象. -
mysql_fetch_row()
//函数原型 MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
结合
mysql_store_result
这个API
来使用,获取每一行的内容. 参数MYSQL_RES *result
是通过mysql_use_result
获取到的返回值. -
mysql_free_result()
//函数原型 void STDCALL mysql_free_result(MYSQL_RES *result);
操作完结果集之后.一定要调用本函数来释放内存; 参数
MYSQL_RES *result
是通过mysql_use_result
获取到的返回值. -
mysql_error()
//函数原型 const char *STDCALL mysql_error(MYSQL *mysql);
函数返回值是
const char*
类型,主要是返回最近调用mysql
函数发生了哪些错误信息 参数MYSQL *mysql
是指定一个MYSQL
对象 -
mysql_close()
//函数原型 void STDCALL mysql_close(MYSQL *sock);
mysql_close()
是每个调用数据库连接的程序在最后阶段都必须要调用的, 很明显它的功能是用来关闭一个MySQL服务端的连接. 参数MYSQL *mysql
是指定一个MYSQL
对象
MySQL的API应用
下面使用一个比较实际的例子,用这些API
写一个简单的单机版数据库管理软件.
本地数据库新建好两个表并存入部分初始信息:
-
先定义好包含文件:
define.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <mysql.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <assert.h>
#pragma comment(lib,"libmysql.lib") -
定义一个管理类:
CManager
提供主菜单的显示,连接数据库和打印错误的功能.
CManager.h
#pragma once
#include "define.h"
#include "CWorker.h"
#include "CAdmin.h"
class CManager
{
MYSQL m_sql;
CWorker m_work;
CAdmin m_admin;
int Menu();
bool ConnectDB();
public:
int Main();
static void PrintError(std::string sPromp)
{
auto & sql = getInstance().m_sql;
std::cout << sPromp << "(" << mysql_errno(&sql) << "):"
<< mysql_error(&sql) << std::endl;
system("pause");
}
static CManager& getInstance()
{
static CManager m;
return m;
}
CManager() : m_admin(m_sql),m_work(m_sql)
{
}
};
CManager.cpp
#include "CManager.h"
using namespace std;
int CManager::Menu()
{
system("cls");
const char* sPrior = m_admin.GetPrior() ? "普通" : "高级";
cout << "\n\n\t\t当前用户:" << m_admin.GetUser() << "【" << sPrior << "】" << endl;
puts("\t\t********************************");
puts("\t\t*\t1、浏览所有信息 *");
puts("\t\t*\t2、添加信息 *");
puts("\t\t*\t3、删除信息 *");
puts("\t\t*\t4、修改信息 *");
puts("\t\t*\t5、查找信息 *");
if (m_admin.GetPrior())
puts("\t\t*\t6、密码修改 *");
else
puts("\t\t*\t6、管理账号 *");
puts("\t\t*\t0、退出 *");
puts("\t\t********************************");
cout << "\t\t请选择:";
int i = 0;
cin >> i;
switch (i)