TCP中间件_个人方案
按照功能分類,不管是直接的 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、
?
轉載于:https://www.cnblogs.com/javaskill/p/5370271.html
總結
以上是生活随笔為你收集整理的TCP中间件_个人方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机万能摄像头ip搜索工具_一款 APP
- 下一篇: java——IO流整理(一)