MySQL数据库接口的VC实现与应用(2)

孤身一人啊1

孤身一人啊1

2016-02-19 14:08

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的MySQL数据库接口的VC实现与应用(2)教程,一起来看看吧!超容易上手~

摘要:MySQL数据库作为一种网络数据库性能十分出色,但其在应用软件中使用较少。本文将主要探讨MySQL提供的两种数据库接口 ——(ODBC API和C API)在VC中的应用,并且形成一个类用以封装C API数据库接口的功能。

关键词:MySQL;数据库接口;ODBC API;C API

3 利用MySQL自带的C API函数实现数据库功能调用

  由于各个数据库之间的差异,它们所提供的数据库功能也就各有不同。这样,通过ODBC API就不可能完全拥有所有的数据库功能,因而影响了程序对数据库的控制功能,也就不能充分发挥数据库的能力。并且这种统一的接口还是以损失效能为前提的,这就使数据库操作时间延长。所以,为了解决以上问题,MySQL的制造商在提供ODBC驱动程序的基础上,还提供了各种编程环境下的API,其中包括C API。这些API函数很显然能尽可能地发挥数据库的能力,并减少数据库操作的延长时间,但却使程序的通用性受到严重影响。

  MySQL提供了一套C API函数,它由一组函数以及一组用于函数的数据类型组成,这些函数与MySQL 服务器进行通信并访问数据库,可以直接操控数据库,因而显著地提高了操控效能。

  C API数据类型包括:MYSQL(数据库连接句柄)、MYSQL_RES(查询返回结果集)、MYSQL_ROW(行集)、MYSQL_FIELD(字段信息)、MYSQL_FIELD_OFFSET(字段表的偏移量)、my_ulonglong(自定义的无符号整型数)等;C API提供的函数包括:mysql_close()、mysql_connect()、mysql_query()、mysql_store_result()、mysql_init()等,其中mysql_query()最为重要,能完成绝大部分的数据库操控。

下面将具体讨论数据库操作类CDatabase通过C API的实现以及在VC中的应用。

3.1 CDatabase类的实现

CDatabase类封装了MySQL数据库的功能,因此不具备通用性,只能在对MySQL的应用程序中使用。下面将根据C++要求及规范给出CDatabase类的具体结构以及相关简要介绍:

class CDatabase
{
public:
BOOL UnLockTable(); //解锁
BOOL LockTable(char* TableName,char* PRIORITY); //加锁
int Reload(); //重新登陆,非零时返回错误信息
char* GetState(); //服务器状态
char* GetServerInfo(); //服务器信息
int GetProtocolInfo(); //协议信息
char* GetHostInfo(); //主机信息
char * GetClientInfo(); //客户机信息
char* GetFieldName(int FieldNum); //字段名
BOOL IsEnd(); //是否最后
int DropDB(char *db); //删除数据库,非零时返回错误信息
void SeekData(int offset); //查找指定数据
int CreateDB(char *db); //创建数据库,非零时返回错误信息
void FreeRecord(); //释放结果集
unsigned int GetFieldNum(); //得到字段数
BOOL ConnectDB(Database_Param *p); //连接数据库
MYSQL_ROW GetRecord(); //得到结果(一个记录)
my_ulonglong GetRowNum(); //得到记录数
BOOL SelectDB(Data_Param *para); //选择数据库
BOOL UpdateRecord(Data_Param *para); //更新记录
BOOL SelectRecord(Data_Param *para); //选择记录
BOOL InsertRecord(Data_Param *para); //插入记录
BOOL DelRecord(Data_Param *para); //删除记录
BOOL SelectAll(Data_Param *para); //选择所有记录
char * OutErrors(); //输出错误信息
CDatabase(); //初始化数据库
virtual ~CDatabase(); //关闭数据库连接

private:
MYSQL mysql; //数据库连接句柄
MYSQL_RES *query; //结果集
MYSQL_ROW row; //记录集
MYSQL_FIELD *field; //字段信息(结构体)
BOOL FindSave(char *str); //查找并保存结果集
};

  通过CDatabase类中定义的这些功能函数,我们可以通过远程或本机完成对MySQL数据库的绝大部分操控,并且由于定义了解锁和加锁功能,使得应用程序能够多线程或多进程地访问数据库,大大提高了效能。以上函数的具体功能都是通过调用C API函数实现的。

3.2 CDatabase类在VC中的应用

第一步 建立初始化MySQL对象,并且将其初始化。即定义CDatabase类对象,这样程序就会自动调用构造函数CDatabase(),完成初始化。

构造函数实现如下:

CDatabase::CDatabase ()
{
mysql_init (&mysql);
}

完成初始化只需定义CDatabase类对象,即

CDatabase base;

第二步 连接服务器,并连接需要的数据库。即调用ConnectDB(Database_Param *p)函数,结构体Database_Param中存放数据库参数,包括主机名、用户名、密码、数据库名等。该函数如返回TRUE表示连接成功,否则表示失败。

连接函数实现如下:

BOOL CDatabase::ConnectDB(Database_Param *p)
{
if(!mysql_real_connect(&mysql,p-host,p-user,p-password,p-db,p-port,p-unix_socket,p-client_flag))
{
OutErrors(); // 输出错误信息
return false;
}
return true;
}

第三步 对数据库进行加锁。即调用LockTable(char* TableName,char* PRIORITY),对相应的表TableName完成相应属


MySQL教程是:MySQL数据库接口的VC实现与应用(2)。性PRIORITY的加锁,使程序兼容多线程功能。 加锁函数实现如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

BOOL CDatabase::LockTable(char* TableName,char* PRIORITY)
{
char str[50];
sprintf(str,"LOCK TABLES %s %s",TableName,PRIORITY);
if(mysql_query(&mysql,str))
return false;
return true;
}


第四步 完成数据库操作。即根据需要调用UpdateRecord(Data_Param *para)、SelectRecord(Data_Param *para)、InsertRecord(Data_Param *para)、DelRecord(Data_Param *para)等操作。其中的结构体Data_Param中存放数据库操作参数。上述两个结构体的定义在global.h中。 InsertRecord函数实现如下,其它实现方法相似:

BOOL CDatabase::InsertRecord(Data_Param *para)
{
char str[80];
sprintf(str,"insert into %s values(%s)",para-tab_name,para-insert_val);
if(mysql_query(&mysql,str))
return false;
return true;
}

第五步 解锁数据库。即调用UnLockTable(),完成对上述被加锁的表的解锁。 解锁函数实现如下:

BOOL CDatabase::UnLockTable()
{
if(mysql_query(&mysql,"UNLOCK TABLES"))
return false;
return true;
}

第六步 关闭数据库连接。即调用析构函数~CDatabase(),关闭数据库,并自动释放初始化时定义的CDatabase类对象。 析构函数如下:

CDatabase::~CDatabase()
{
if(query)
mysql_free_result(query);
mysql_close(&mysql);
}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

注意:在编译程序时,必须加入MySQL的库文件libmySQL.lib。

展开更多 50%)
分享

猜你喜欢

MySQL数据库接口的VC实现与应用(2)

编程语言 网络编程
MySQL数据库接口的VC实现与应用(2)

MySQL数据库接口的VC实现与应用(1)

编程语言 网络编程
MySQL数据库接口的VC实现与应用(1)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL数据库接口的VC实现与应用(3)

编程语言 网络编程
MySQL数据库接口的VC实现与应用(3)

MySQL数据库备份与恢复

编程语言 网络编程
MySQL数据库备份与恢复

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

实现MySQL数据库数据的同步方法介绍

MySQL mysql数据库
实现MySQL数据库数据的同步方法介绍

MySQL数据库的启动与终止

编程语言 网络编程
MySQL数据库的启动与终止

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

AJAX 浏览器支持

AJAX 浏览器支持

Mysql权限系统工作原理

Mysql权限系统工作原理
下拉加载更多内容 ↓