非直连方式下C语言程序与数据库的消息交互流程

      【文章摘要】

       在《如何在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,欢迎关注!)

时间: 2024-09-20 07:38:14

非直连方式下C语言程序与数据库的消息交互流程的相关文章

mysql5.7在centos下编写c语言程序操作数据库时,头文件#include<mysql/mysql.h>报错

问题描述 mysql5.7在centos下编写c语言程序操作数据库时,头文件#include<mysql/mysql.h>报错 mysql5.7在centos下编写c语言程序操作数据库时,头文件#include报错 解决方案 这是没有找到plugin_auth_common.h文件啊,你对照一下目录下面有没有这个文件啊...另外这个/usr/include/mysql/mysql目录看起来有点奇怪啊,你是不是多建了一层mysql目录

Linux下c语言延迟程序

问题描述 Linux下c语言延迟程序 我用的Ubuntu14.04,想写了一个延迟程序,具体是延迟一秒输出一个 '.' : for(i =0;i<10;i++) {sleep(1);printf(".");} 但是效果是先延迟10秒再输出10个'.'要的效果是每一秒输出一个'.' 解决方案 Linux下C语言程序开发环境Linux下C语言程序开发环境Linux下C语言程序的编译过程 解决方案二: http://blog.chinaunix.net/uid-722885-id-12

《Linux 高级程序设计(第三版)》——第1章  Linux下C语言开发环境 1.1 Linux操作系统简介

第1章 Linux下C语言开发环境 Linux应用程序开发平台有别于Windows应用程序开发平台,因此在介绍具体编程内容之前,本书第1.2章主要介绍Linux操作系统下C语言程序的开发环境和开发工具. 本章主要介绍Linux下C语言开发环境,包括一些基本概念和基本编程环境.本章第1节主要对Linux操作系统及其相关术语进行了简要介绍. 本章第2节主要介绍Linux操作系统下编程基本概念以及如何获得Linux下的帮助文件,包括Linux操作系统下C语言库文件标准以及系统调用的基本概念. 本章第3

c语言问题-Linux下的C语言程序问题无限循环

问题描述 Linux下的C语言程序问题无限循环 这个程序我在Linux里用gcc编译,然后无限循环,我用ctrl+c但是只能停止循环,却不能退出运行,这是一个问题,还有一个就是为什么它会无限循环?我把for里面中间一个x!=9.9改成x<=9.9还是无限循环,为什么? 解决方案 杂记之C语言之无限循环 解决方案二: 改成<=9.9就不会出现这个情况的, 解决方案三: 亲测,改为<=9.9不是无限循环,用!=是无限循环的原因很简单,float,double的!=不能这么判断,比如你判断 a

算法-用一个C语言程序评判五子棋胜负(非人工智能),总是不过,求解

问题描述 用一个C语言程序评判五子棋胜负(非人工智能),总是不过,求解 11155 ly与lyon的终极巅峰对决 时间限制:1000MS 内存限制:65535K 提交次数:566 通过次数:130 题型: 编程题 语言: G++;GCC Description 从前有一天,ly与lyon在讨论人工智能里面的博弈问题,恰好,他们提到了五子棋. 当然,这里说的五子棋是指无禁手(不知道什么是禁手的也不用管了,跟这题没关系)的五子棋: 黑先下,黑白轮流下,最先在横竖斜任一方向上形成连续的5个子(或以上)

《C语言开发从入门到精通》一2.3 在Linux下开发C程序

2.3 在Linux下开发C程序 知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\在Linux下开发C程序.mp4 在平常工作中,我们都熟识了Windows系统,程序开发也习惯了在Windows环境下开发程序这一工作模式.但是,在特殊应用领域,例如单片机应用和嵌入式开发,就需要在Linux环境下开发C程序.Linux是一种计算机操作系统,是一套免费使用和自由传播的类UNIX操作系统,它主要用于基于Intel x86系列CPU的计算机上.这个系统是由世界各地成千上万的程序员设计和实现的.其目

Linux下C语言多线程,网络通信简单聊天程序

原文:Linux下C语言多线程,网络通信简单聊天程序 功能描述:程序应用多线程技术,可是实现1对N进行网络通信聊天.但至今没想出合适的退出机制,除了用Ctr+C.出于演示目的,这里采用UNIX域协议(文件系统套接字),程序分为客户端和服务端.应用select函数来实现异步的读写操作. 先说一下服务端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受"连接"请求,然后调用创建线程函数,创造新的线程,进入下一个循环.这样每当有一个新的"连接"被

c语言程序题来个大神帮忙下

问题描述 c语言程序题来个大神帮忙下 用一张百元纸币兑换一元.二元和五元的纸币,要求兑换后纸币的总数为50 张,问共有多少种换法? 每种换法中各面值的纸币分别为多少张?求大神给个c的程序,急用 strong text 解决方案 穷举就可以了 for (int i = 0; i <= 100; i++) for (int j = 0; j <= 50; j++) for (int k = 0; j <= 20; j++) { if (i + j + k == 50 && i

《C语言开发从入门到精通》一2.2 在Windows环境下开发C程序

2.2 在Windows环境下开发C程序 知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\在Windows环境下开发C程序.mp4 DOS环境对广大读者来说十分陌生,并且在DOS下进行开发也十分麻烦.为此,专门推出了Windows环境下的开发工具.Win-TC其实就是一种Windows环境下的开发工具,但是其功能和Turbo C基本类似,只是在编译和运行上更加方便而已.随着计算机技术的发展,编程工具也随之更新换代.目前最受程序员喜爱的开发工具,当属微软的Visual Studio. 2.2