接上篇vc++實現反射式資料庫模版(3.序列化、反序列化與訊息對映)
前三節參照mfc實現了資料模型的序列化工作。這一節就利用ado完成資料庫模版,這裡實現增加和查詢功能,有興趣可以自己參照完成刪除和更新。
由於查詢結果可能是乙個集合,這裡我們把資料模型設計成煉表,只需在基類增加tdobject* m_pnextobject;指向下個資料模型的指標。
參照軟體設計原則,我們把業務物件和業務邏輯分開。建立tdlogic做為我們的資料操作模版。
#pragma once
#include"tdobject.h"
//連線字串
id這裡做為自增主鍵(注意標識規範選擇是)。
使用時我們只需要將資料物件傳遞進去就可以了,十分方便。
//初始化com
coinitialize(null);
//測試
tdpersonp;
p.set_name("小明");
p.set_age(10);
tdcarc;
c.set_name("賓士");
c.set_price("500000.5");
/*p.show();
c.show();*/
tdlogiclogic;
//增加資訊
logic.insert(&p);
logic.insert(&c);
//查詢資訊
printselect(&p);
printselect(&c);
couninitialize();
printselect是為了方便封裝的乙個測試函式,用於顯示查詢結果,直接看原始碼就可以了,這裡不做解釋。
執行結果:
結果不出意外,我們用乙個通用的函式實現了對不同資料模型的增加和查詢。
使用時我們的只需要建立自己的資料模型類繼承
tdobject,
新增初始化巨集,實現巨集和初始化成員變數及成員變數對映。
後續優化:這四節簡單實現了功能,後續擴充套件優化空間仍然很大,比如可以通過智慧型指標替換接收的鍊錶,這樣既能防止記憶體洩漏更加方便操作;tdlogic用單例模式來實現等。這些都需要根據具體功能和習慣自己去研究了。
到這裡資料庫模版章節已經完了,後續我們會在該基礎上繼續實現與http伺服器的soap互動,從c/s過渡到b/s。
文中測試使用資料庫在原始碼首頁,方便新增測試。
使用反射實現多資料庫的支援
現今資料庫行業中可供選擇的資料庫有很多,oracle,sql,access等等,而且不同的資料庫又有不同的標準,即使同樣由微軟推出的sql和access也有一些語句是sql支援而access不支援的,就更不要說其它的特性了。那麼,如果我們的使用者是未知的,並不知道將來使用這個系統的使用者使用的是什麼...
VC實現ODBC資料庫操作例項解析
開啟資料庫 cdatabase database database.openex t dsn zhuxue cdatabase noodbcdialog zhuxue為資料來源名稱 關聯記錄集 crecordset recset database 查詢記錄 cstring ssql1 ssql1 s...
分布式鎖 資料庫實現
select 檢索出的資料,for update 加上了一把鎖,其他的人是不能修改這個資料的,也不能在給這個資料加鎖。其他執行緒可以檢索出來,但是我在用 for update 再給這些資料加鎖是加不上的,因為這個鎖呢,已經被前乙個執行緒給鎖住了。其他人是不能給它加鎖的,在加鎖的期間,其他人也不能修改...