欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Synopse mORMot框架样例学习02 - Embedded SQLite3 ORM

程序员文章站 2024-02-21 12:33:10
...

通过样例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文件,可以看到数据的存储情况.

Synopse mORMot框架样例学习02 - Embedded SQLite3 ORM

添加和查找的过程就是CRUD中的Create和Read,下面试试Update和Delete,先把界面改造一下,添加2个按钮Update和Delete,再添加一个显示日志的Memo,具体界面如下:

Synopse mORMot框架样例学习02 - Embedded SQLite3 ORM

具体的实现代码如下:

{ 删除数据的操作 }
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语句,也就是说这些基本操作是和数据库无关的,看样子这样的设计应该比较好维护,继续学习,希望在学习中不断得到新的养分,充实自己,每天都需要挑战,每天都要进步一点点,防止老年痴呆.