博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
非直连方式下C语言程序与数据库的消息交互流程
阅读量:6228 次
发布时间:2019-06-21

本文共 1316 字,大约阅读时间需要 4 分钟。

      【文章摘要】

       在《如何在C语言里面执行SQL语句?》(http://www.zhouzhaoxiong.com/116.html)一文中,我介绍了直连方式下C语言程序与数据库打交道的过程。

       本文简单介绍非直连方式下C语言程序与数据库的消息交互的流程,供大家参考。

 

        一、消息交互总体流程

        非直连方式,也称异步方式。顾名思义,在这种方式下,C程序不直接与数据库打交道,而是通过一个独立的第三方模块与数据库进行消息交互。消息交互的总体流程如图1所示。

图1 消息交互的总体流程

       该方式的优点如下:

       第一,C程序不必一直等待数据库的返回结果,可以继续执行后面的流程,这在一定程度上提高了程序的执行效率。

       第二,C程序只需将包含SQL语句的消息发给第三方模块即可,不必实现连接数据库、在数据库中执行SQL语句等较为复杂的功能,这在一定程度上简化了C程序的操作流程。

       该方式的缺点如下:

       第一,系统架构较为复杂,需要准确配置C程序与第三方模块的链路,同时要保证第三方模块功能的正常性。

       第二,C程序要准确定义并解析消息序列号(会话号),否则极有可能会导致第三方模块返回的结果出现混乱,这增加了C程序时序处理的复杂性。

 

       二、消息交互流程

       C程序向第三方模块发消息的流程如图2所示。

图2 C程序向第三方模块发消息的流程

       从图2中,我们可以看出:

       第一,C程序发给第三方模块的SQL语句必须要符合语法规则,否则,即使是消息发送成功,也不会返回正确的执行结果。

       第二,为了正确接收到第三方模块返回的消息,C程序要定义好消息事件号(第三方模块在返回执行结果时会原样返回该事件号),同时也要分配好会话号(第三方模块在返回执行结果时会原样返回该会话号)。这样可以保证C程序对第三方模块返回消息的解析的正确性。

       第三,当向第三方模块发消息的函数执行失败之后,不要再继续执行后续流程,同时要打印详细的失败日志,供查看问题所用。

       第四,当向第三方模块发消息的函数执行成功之后,C程序可以继续执行后续流程,但分配的会话号不要释放掉了。

 

        C程序接收第三方模块返回消息的流程如图3所示。

图3 C程序接收第三方模块返回消息流程

       从图3中,我们可以看出:

       第一,会话号是保证C程序处理时序的关键。在程序中,会话号一般是保存在全局的会话缓存中的。

       第二,只有当向第三方模块发消息时的会话号与第三方模块返回消息时的会话号一致时,C程序才能进行对应的处理。当C程序利用SQL语句执行结果走完后续流程之后,一定要释放该会话号。

       第三,C程序是根据事件号进入对应的流程进行处理的,为了确保流程处理的正确性,在向第三方模块发消息时一定要定义好清晰的、容易区分的事件号。

 

        三、总结

       在实际的软件开发项目中,C语言程序和数据库打交道可谓是家常便饭。是选择直连的方式?还是选择非直连的方式?这就要综合项目的实际情况、已有模块安装情况等进行合理的选择。

       本文介绍了非直连方式下C语言程序与数据库交互的具体流程,为相关软件开发工作的顺利开展提供了有益的参考。

 

 

 

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

你可能感兴趣的文章
Firebug控制台详解[转]
查看>>
使用Flash Builder 4.6出现 新建配置 失败 java.lang.NullPointerException错误
查看>>
Frp基础配置模版
查看>>
JDK源码阅读--Object
查看>>
有关于认证和加密
查看>>
深入浅出Git教程(转载)
查看>>
[转载]MySQL5.6 PERFORMANCE_SCHEMA 说明
查看>>
max_allowed_packet引起同步报错处理
查看>>
006 复杂的数据类型&函数(方法)
查看>>
javascript:getElementsByName td name
查看>>
ASP.NET连接SQL、Access、Excel数据库(二)——连接实例
查看>>
FreeRTOS 特性简介
查看>>
Linux--前后端分离部署
查看>>
java阶段学习目标
查看>>
Azure IoT 技术研究系列2
查看>>
day24-3-2子类继承构造方法
查看>>
我们一起学习WCF 第五篇数据协定和消息协定
查看>>
Linux 与 Windows 文件互传(VMWare)
查看>>
Python学习笔记八 面向对象高级编程(一)
查看>>
Oracle内置函数
查看>>