一种基于C程序连接MYSQL数据库的管理方法

阅读: 评论:0

著录项
  • CN201310683876.6
  • 20131216
  • CN103646084A
  • 20140319
  • 浪潮电子信息产业股份有限公司
  • 路凯
  • G06F17/30
  • G06F17/30

  • 山东省济南市高新区舜雅路1036号
  • 中国,CN,山东(37)
摘要
本发明提供一种基于C程序连接MYSQL数据库的管理方法,程序在启动时初始化部分数据库连接到内存中,在使用数据库连接时,从已经初始化的数据库连接资源中获取连接,如果连接已经使用完,再重新创建一个连接对数据库进行操作,如果创建的所有连接数达到一个最大值,则让程序模块等待连接释放再申请。如果申请连接资源较少,而数据库连接资源过多,则释放一部分连接。如果申请连接资源过多,则动态申请一部分连接,加入到内存中。该一种基于C程序连接MYSQL数据库的管理方法和现有技术相比,提高了获取连接的效率,同时避免了同时有大量的应用程序对数据库进行连接,这种方法能明显提高对数据库操作的性能,实用性强,易于推广。
权利要求

1.一种基于C程序连接MYSQL数据库的管理方法,其特征在于其具体管理过程为:

步骤一、初始化部分数据库连接到内存中;

步骤二、在使用数据库连接时,从已经初始化的数据库连接资源中获取连接;

步骤三、如果连接已经使用完,再重新创建一个连接对数据库进行操作;如果创建的所有连接数达到一个最大值,则让程序模块等待连接释放再申请;如果申请连接资源较少,而数据库连接资源过多,则释放一部分连接;如果申请连接资源过多,则动态申请一部分连接,加入到内存中;

步骤四、程序结束,删除数据库连接链表,释放连接,回收空间。

2.根据权利要求1所述的一种基于C程序连接MYSQL数据库的管理方法,其特征在于:所述步骤一的详细过程是指:创建一个空的数据库连接头结点;创建部分连接,加入到头结点所在的链表中。

3.根据权利要求1或2所述的一种基于C程序连接MYSQL数据库的管理方法,其特征在于:所述步骤二的详细过程是指:用户获取数据库连接直接从链表中获取一个free的连接,同时置标志位busy;连接使用完毕,释放数据库连接到内存链表中,置标志位为free。

4.根据权利要求3中任一所述的一种基于C程序连接MYSQL数据库的管理方法,其特征在于:所述步骤三的详细过程是指:连接管理程序根据连接链表中的连接状态实时进行动态管理,即

当空闲连接过少,即标志位为free的连接太少,动态增加部分连接到链表中,以满足用户需要;

当空闲连接过多,即标志位为free的连接过多,释放链表中部分free连接,节省资源和空间;

其中总的连接数在最小连接数和最大连接数之间。

说明书
技术领域

本发明涉及计算机应用技术领域,具体的说是一种基于C程序连接MYSQL数据库的管理方法。

数据库连接是一种关键的有限的昂贵的资源。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。

传统的方法是当程序模块需要操作数据库时,则申请数据库连接,申请成功,则操作数据库,如果无法申请成功,则程序阻塞或者不停的申请,当多模块同时申请操作数据库时导致数据库连接过多,同时频繁的打开关闭数据库会导致程序或者数据库效率低下,性能降低甚至崩溃,影响整体的运行效率。

另一种传统方法是java数据库连接池,通过JDBC创建数据库连接来生成数据库连接池,同时实现对数据库连接池的管理。在创建连接过程当中需要装载数据库驱动程序,然后才能实现管理,无法实现直接从数据库获取连接,用C语言实现时无法使用该方法。

在C语言与mysql的交互过程中,只能通过相关的API与c语言的接口进行数据库的连接和数据库操作,具体的连接数和连接管理没有限制,因此对整个应用程序的稳定性和健壮性没有保证,同时频繁的连接删除数据库,增加了开销,使得效率和性能降低。

本发明的技术任务是解决现有技术的不足,提供一种基于C程序连接MYSQL数据库的管理方法。

本发明的技术方案是按以下方式实现的,该一种基于C程序连接MYSQL数据库的管理方法,其具体管理过程为:

步骤一、初始化部分数据库连接到内存中;

步骤二、在使用数据库连接时,从已经初始化的数据库连接资源中获取连接;

步骤三、如果连接已经使用完,再重新创建一个连接对数据库进行操作;如果创建的所有连接数达到一个最大值,则让程序模块等待连接释放再申请;如果申请连接资源较少,而数据库连接资源过多,则释放一部分连接;如果申请连接资源过多,则动态申请一部分连接,加入到内存中;

步骤四、程序结束,删除数据库连接链表,释放连接,回收空间。

所述步骤一的详细过程是指:创建一个空的数据库连接头结点;创建部分连接,加入到头结点所在的链表中。

所述步骤二的详细过程是指:用户获取数据库连接直接从链表中获取一个free的连接,同时置标志位busy;连接使用完毕,释放数据库连接到内存链表中,置标志位为free。

所述步骤三的详细过程是指:连接管理程序根据连接链表中的连接状态实时进行动态管理,即

当空闲连接过少,即标志位为free的连接太少,动态增加部分连接到链表中,以满足用户需要;

当空闲连接过多,即标志位为free的连接过多,释放链表中部分free连接,节省资源和空间;

其中总的连接数在最小连接数和最大连接数之间。

本发明与现有技术相比所产生的有益效果是:

本发明的一种基于C程序连接MYSQL数据库的管理方法使用统一的连接管理程序对数据库连接进行动态管理,允许应用程序重复使用现有的数据库连接,而且是直接从内存中获取,而不是重新创建一个,提高了获取连接的效率,同时避免了同时有大量的应用程序对数据库进行连接,这种方法能明显提高对数据库操作的性能,实用性强,易于推广。

附图1是本发明的实施示意图。

下面结合附图对本发明的一种基于C程序连接MYSQL数据库的管理方法作以下详细说明。

附图1所示,本发明提供一种基于C程序连接MYSQL数据库的管理方法,本方法是通过在内存中开辟一块空间,直接从数据库中获取连接,放到内存空间,实现对这块内存空间的管理,用户模块需要操作数据库时,从内存空间中获取一个没有被使用的内存,进行数据库操作,操作完成之后,释放到内存空间中,数据库的连接释放统一由该方法来实现。进一步的,其具体管理过程为:

步骤一、初始化部分数据库连接到内存中。

步骤二、在使用数据库连接时,从已经初始化的数据库连接资源中获取连接,该链表连接的结构程序为:

typedef struct conn_list

{

    MYSQL *conn_ptr;                    

    int flag;                 //是否被占用  0非,1是被占用

    struct conn_list *next;

}Conn;

步骤三、如果连接已经使用完,再重新创建一个连接对数据库进行操作;如果创建的所有连接数达到一个最大值,则让程序模块等待连接释放再申请;如果申请连接资源较少,而数据库连接资源过多,则释放一部分连接;如果申请连接资源过多,则动态申请一部分连接,加入到内存中。

上述连接管理结构程序为:

typedef struct 

{

    Conn * pconn_head;        //连接链表

    int max_conn_num;        //最大连接数

    int cur_conn_num;         //当前链表中连接数

    int min_conn_num;        //最小连接数

    int init_conn_num;         //初始链接数

}Connpool;

//初始化连接

Connpool* Connpool_init(int max_num,int min_num,int init_num); 

//删除所有连接

int Connpool_free(Connpool* pool);              

    //从连接链表中获取连接

MYSQL* GetConn(Connpool* pool);              

//释放连接到连接链表中

int FreeConn(MYSQL* conn_ptr,Connpool* pool);   

//对连接链表进行管理

int Connpool_manage(Connpool* pool,int max_freeconn,int min_freeconn); 

步骤四、程序结束,删除数据库连接链表,释放连接,回收空间。

所述步骤一的详细过程是指:创建一个空的数据库连接头结点;创建部分连接,加入到头结点所在的链表中。

所述步骤二的详细过程是指:用户获取数据库连接直接从链表中获取一个free的连接,同时置标志位busy;连接使用完毕,释放数据库连接到内存链表中,置标志位为free。

所述步骤三的详细过程是指:连接管理程序根据连接链表中的连接状态实时进行动态管理,即

当空闲连接过少,即标志位为free的连接太少,动态增加部分连接到链表中,以满足用户需要。

当空闲连接过多,即标志位为free的连接过多,释放链表中部分free连接,节省资源和空间。

其中总的连接数不能超过最大连接数、总的连接数不能小于最小连接数。

以上所述仅为本发明的实施例而已,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

本文发布于:2023-04-14 09:22:39,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/86542.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图