Synopse mORMot框架樣例學習02 - Embedded SQLite3 ORM
通過樣例01,學習到了數據單元的定義方法,靜態服務器的創建方式,以及ORM的基本使用方法,現在來看看樣例02 - Embedded SQLite3 ORM,同樣從字面意思猜測它應該是介紹嵌入式SQLite3數據庫的ORM方法.
通過例02的源碼,可以發現只有Project02.dpr工程文件源碼,并沒有pas單元文件,在例01里邊簡單做過說明,是因為例02共用01的所有單元,所以看到的項目管理界面和例01是一樣的,僅僅有2行工程代碼有點變動,如下:
{ 嵌入式數據庫引擎初始化 }
Form1.Database := TSQLRestServerDB.Create(Form1.Model, ChangeFileExt(ExeVersion.ProgramFileName, '.db3'));
{ 根據Model(SampleData單元中的定義)創建表格 }
TSQLRestServerDB(Form1.Database).CreateMissingTables;
因為Unit1.pas單元代碼就是例01的,所以直接運行程序看看,同樣輸入3組測試數據:
a MessageA,b MessageB,c MessageC
然后借助sqliteadmin打開例2文件夾下的Project02.db3文件,可以看到數據的存儲情況.
添加和查找的過程就是CRUD中的Create和Read,下面試試Update和Delete,先把界面改造一下,添加2個按鈕Update和Delete,再添加一個顯示日志的Memo,具體界面如下:
具體的實現代碼如下:
{ 刪除數據的操作 }
procedure TForm1.DeleteButtonClick(Sender: TObject);
var
Rec: TSQLSampleRecord;
begin
Rec := TSQLSampleRecord.Create(Database, 'Name=?', [StringToUTF8(NameEdit.Text)]);
try
if Rec.ID = 0 then
LogMemo.Lines.Add('Delete:無此數據,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
else
begin
if Database.Delete(TSQLSampleRecord, Rec.ID) then
LogMemo.Lines.Add('Delete:刪除一條數據,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
else
LogMemo.Lines.Add('Delete:刪除失敗,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條');
end;
finally
Rec.Free;
end;
end;
{ 更新數據的操作 }
procedure TForm1.UpdateButtonClick(Sender: TObject);
var
Rec: TSQLSampleRecord;
begin
Rec := TSQLSampleRecord.Create(Database, 'Name=?', [StringToUTF8(NameEdit.Text)]);
try
if Rec.ID = 0 then
LogMemo.Lines.Add('Update:無此數據,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
else
begin
Rec.Question := StringToUTF8(QuestionMemo.Text);
if Database.Update(Rec) then
LogMemo.Lines.Add('Update:更新一條記錄,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
else
LogMemo.Lines.Add('Update:更新失敗,當前記錄' + IntToStr(Database.TableRowCount(TSQLSampleRecord)) + '條')
end;
finally
Rec.Free;
end;
end;
同樣的代碼可以直接用到例01中,效果是一樣的,實現這些并沒有寫任何SQL語句,也就是說這些基本操作是和數據庫無關的,看樣子這樣的設計應該比較好維護,繼續學習,希望在學習中不斷得到新的養分,充實自己,每天都需要挑戰,每天都要進步一點點,防止老年癡呆.
智能推薦
Sqlite3源碼學習(5)OS的接口VFS
之前講了那么多的環境搭建,現在終于可以學習源碼了。官方有一篇講解VFS的文檔,對理解sqlite3的VFS有很大的幫助: http://www.sqlite.org/vfs.html 1.VFS簡介 VFS也就是所謂的虛擬文件系統,因為sqlite3運行在不同的平臺上會有不同的文件系統,V...
ORM 框架
ORM 框架 轉:https://www.cnblogs.com/pycode/p/mysql-orm.html SQLAlchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用關系對象映射進行數據庫操作,簡言之便是:將對象轉換成SQL,然后使用數據API執行SQL并獲取執行結果。 SQLAlchemy本身無法操作數據庫,其必須依賴pymsql等第三方插件,Dial...
Django框架(3) —— ORM框架、模型設計
ORM框架 O: object,類對象 R: relation,關系,也就是關系數據庫中數據表 M: mapping,映射 在ORM框架中,它幫我們把類和數據表進行了一個映射,可以讓我們通過類和類對象就能操作它所對應的表格中的數據。ORM框架還有一個功能,它可以根據我們設計的類自動幫我們生成數據庫中的表格,省去了我們自己建表的過程。 django中內嵌了ORM框架,不需要直接面向數據庫編程,而是定...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...