按照功能分类,不管是直接的 insert/delete/update/select语句 还是 调用存储过程,基本的功能 就是 增删改查。又分为两大类: (1)、查询(会返回结果集的),(2)、非查询(不会返回结果集的,只会返回生效的记录的条数)。

注意(1): 双方 传送字符串的时候,约定好 使用哪种字符集(ansi/utf8/gdk/...),窄/宽/变长 字符集...

注意(2): 约定-->字符串 都使用 2个'\0' 最为结尾。

ZC: unicode 算不算一种字符集?还是 一类字符集的统称?

1、

客户端

(1)、int32(信息总长)

(2)、int32(信息的Idx)

(3)、int32(语句类型,insert/delete/update/select/存储过程)

(4)、字符串(sql语句)

2、

服务端

(1)、int32(信息总长)

(2)、int32(信息的Idx)

(3)、int32([客户端请求的]语句类型,insert/delete/update/select/存储过程)

2.1、没有结果集

(4)、int32(生效的记录的条数)

2.2、有结果集

(4)、int32(返回的结果集中列的数量)

(5)、int32(返回的结果集中行的数量,即返回了几条记录)

(6)、[所有的 列名的信息]

  (6.1)、int32(第?列的 列名信息的长度)

  (6.2)、[第?列的 列名信息]

    (6.2.1)、int32(指明该列的数据类型,int/float/字符串/...)

    (6.2.2)、字符串(列名)

(7)、[结果集中 第?条 记录的信息]

  (7.1)、int32(该条记录中 第?列的 数据的长度)

  (7.2)、byte数组(该条记录中 第?列的 数据。根据 6.1和7.1 判断数据的类型和值)

3、待考虑问题

  3.1、客户端 发送批量sql语句

    3.1.1、批量的 增/删/改 语句 ==> 这个比较好处理 同(2.1)的处理方式一样就行

    3.1.2、批量的 查 语句 ==> 这个貌似没法弄吧?是要弄一个临时表的效果,然后返回一个最终的结果集?? --> 不知道实际情况下,会不会有这种需求?

    3.1.3、批量的 增/删/改/查 混在一起 ---> 不知道实际情况下,会不会有这种需求?

3.2、

4、

解析返回的 结果集

伪代码:

Txxx

{

  byte[] msg; // 存放 服务端传回来的 查询的 所有信息

  int iColumnNum; // 结果集中 共有几列

  int iRowNum; // 结果集中 共有几条记录

  List<String> listColumn; // 存放 结果集 里面的所有列的列名

  List<int> listColumnType; // 所有的列的数据类型

  int[][] offset; // 第i行第j列的信息 在 msg中的偏移,也就是 指向(7.1)

  // ... 用于 得到 第i行第j列的信息 的各种 函数

  bool GetValueInt_byRowCol(int _iRow, _iCol, int* _piOut)

  {

    // 函数 成功 则返回 true,失败 则返回 false

    // 若 _iRow行 _iCol列 的数据是 int型,则 *_piOut 存放 *((int*)(&msg[offset[_iRow][_iCol]])),函数返回 true;否则函数返回false

  }

  bool GetValuePtr_byRowCol(int _iRow, _iCol, char** _ppcOut)

  {

    // 函数 成功 则返回 true,失败 则返回 false

    // 若 _iRow行 _iCol列 的数据是 字符串类型,则 *_ppcOut 存放 (char*)(&msg[offset[_iRow][_iCol]]),函数返回 true;否则函数返回false

  }

}

5、

TCP中间件_个人方案的更多相关文章

  1. 权限模块_整体方案说明_设计实体&映射实体_实现初始化权限数据的功能

    权限模块_整体方案说明 要点说明 权限就是控制功能的使用(功能对应着URL). 对功能的控制就是对URL的访问控制. 在我们的程序中,一个功能对应一个或两个URL: 1,例如列表或删除功能,只对应一个 ...

  2. NIO 服务端TCP连接管理的方案

    最近做的一个项目需要在服务端对连接端进行管理,故将方案记录于此. 方案实现的结果与背景 因为服务端与客户端实现的是长连接,所以需要对客户端的连接情况进行监控,防止无效连接占用资源. 完成类似于心跳的接 ...

  3. TCP_DB_中间件_数据打包格式

    ZC: 这里约定的是,C和S之间 传输的TCP数据包的格式 1.TCP数据包 打包格式 1.1.TCP包长度(int32) + TCP包序号(int32) + TCP包类型(int32) + TCP包 ...

  4. TCP_DB_中间件_遗留问题

    1.一些经验 1.1.Delphi客户端中 Block的socket,使用 读取超时的话,会有大约1秒的时间等待...很影响使用体验...于是 放弃超时读取的方式,改为 在每次读取到TCP数据包时 都 ...

  5. java_tomcat_the_APR based Apache Tomcat 小喵咪死活启动报错_临时方案

    报错信息如下: 信息: The APR based Apache Tomcat Native library which allows optimal performance in productio ...

  6. MySQL高可用方案

    高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...

  7. [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比

    前言 尽管每辆汽车都有后视镜,但不可避免地都存在一个后视镜的盲区,倒车雷达则可一定程度帮助驾驶员扫除视野死角和视线模糊的缺陷,提高驾驶安全性.上一节已经分析清倒车雷达的语音模块(上一节),本节将深入分 ...

  8. TCP/IP协议原理与应用笔记17:IP编址(重点)

    1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...

  9. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

随机推荐

  1. windows程序查看可以行文件依赖库

    通常在做windows下开发程序,发布的时候需要同时打包一些依赖库:我们可以通过工具直接查看需要发布的程序依赖的程序,这样可以方便快捷的打包程序 这里我们推荐使用:dependencywalker 下 ...

  2. 页面的日志服务 web页面渲染 服务 ; 服务耦合带来的问题

    情景: 虽然对web服务做了3节点的负载均衡,但是由于埋点数据的落盘的代码也在相同服务器上,导致当flume处理日志的吞吐量达到瓶颈时,3节点的请求积压,挤占服务器资源,导致接口数据处理迟缓,页面加载 ...

  3. django之多表查询与创建

    https://www.cnblogs.com/liuqingzheng/articles/9499252.html # 一对多新增数据 添加一本北京出版社出版的书 第一种方式 ret=Book.ob ...

  4. 使用Kotlin进行Android开发

     Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者.Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并 ...

  5. (转)RTP-H264封包分析

    rtp(H264)第一个包(单一NAL单元模式)————-sps 80 {V=10,p=0,x=0,cc=0000} 60 {m=0,pt=110 0000} 53 70{sequence numbe ...

  6. 使用ansible 完成yum安装lamp环境

    使用ansible 完成yum安装lamp环境 [root@node2 ~]# cd /etc/ansible/playbook/[root@node2 playbook]# lslamp[root@ ...

  7. PHP连接局域网MYSQL数据库的实例

    PHP连接局域网MYSQL数据库的例子. 代码:                           ?>         第一行ip对应局域网某台主机,关于局域网内mysql连接可参考我的摘抄 ...

  8. PHP函数的创建

    看代码 PHP函数的创建,包括参数,和其他的语言一样 <?php #PHP crate function function writeName($name) { echo 'Name is '. ...

  9. PageObjects 设计模式

    什么是Page Objects(翻译为:页面对象?)… 简单的说,Page Objects是指UI界面上用于与用户进行交互的对象.它可以指整个页面,也可以指Page上的某个区域.Page Object ...

  10. django联合查询

    假设A表的主键aid作为B表的外键,A表有属性name,那么想查询B表中name为abc的元素就可以这样写: B.objects.all().filter(aid__name = 'abc') __真 ...