mORMot 1.18 第23章 使用純SQL

mORMot 1.18 第23章 使用純SQL

有時你可能不想使用ORM,或者由於現有且不可更改的數據庫與ORM不兼容而無法使用它。在這些情況下,你仍然可以依靠mORMot的其他功能,同時使用純SQL。

你可以發出純SQL命令並以JSON格式獲取數據。下面的示例展示瞭如何使用快速且開源的Zeos數據庫庫與MariaDB/MySQL一起執行此操作。

請注意,如何在同一臺機器上的多個數據庫中對錶進行聯接是可能的。


program listpeople;

{$APPTYPE CONSOLE}

uses
  Windows, Messages, SysUtils, Variants, Classes,
  SynCommons, mORMot, mORMotSQLite3, mORMotDB,
  SynDB, SynDBSQLite3, SynDBDataSet, SynDBZeos,
  SynSQLite3, SynSQLite3Static, DateUtils;

procedure List(const aRawServerName, aDatabaseName, aUserID, aPassWord: RawUTF8);
var
  PropsClass: TSQLDBConnectionPropertiesClass;
  aServerName: RawUTF8;
  U, S: RawUTF8;
  props: TSQLDBConnectionProperties;
  i: integer;
begin
  PropsClass := TSQLDBZEOSConnectionProperties;
  aServerName := TSQLDBZEOSConnectionProperties.URI(dMySQL, aRawServerName);
  props := PropsClass.Create(aServerName, aDatabaseName, aUserID, aPassWord);
  try
    S := 'u.surname,u.givennames,u.departments, u.offices,u.phones,u.email, ' + 
         'u.homepage, p.employeeid, h.title ';
    U := props.Execute('SELECT ' + S + ' FROM ' + 
                       'import.users u LEFT JOIN ' +
                       'local.person p ON p.email = u.email ' +
                       'LEFT JOIN local.hr h ON p.nexus = h.userid ' +
                       ' WHERE surname LIKE ?',['engelke%']).FetchAllAsJSON(True);
    writeln(U);
  finally
    props.Free;
  end;
end;

begin
  try
    List('blah.erickengelke.com:3306', 'customers', 'userX', 'ChangeMe23');
  except
    on E: Exception do
      writeln('ERROR: ' + E.Message);
  end;
end.

你可以使用props.Execute(sql).FetchAllAsJSON來執行返回值的命令,或者使用props.ExecuteNoReturn(sql)當沒有預期結果時,例如:

Props.ExecuteNoReturn('DELETE * FROM users WHERE email like ?',['erick%']);

注意:在提供的代碼示例中,存在一些小錯誤和不一致之處,比如local.personlocal.hr可能不是有效的表名,它們僅用於示例目的。在實際應用中,需要替換爲真實的數據庫表名。此外,SELECT語句中的字符串連接和字段列表也需要根據實際的數據庫結構調整。代碼中的?佔位符用於參數化查詢,以防止SQL注入攻擊,並且在實際執行時需要提供相應的參數值。

另外,請注意ExecuteNoReturn用於執行不返回結果的SQL語句,如DELETEUPDATEINSERT等。而Execute方法則用於執行返回結果的查詢,並通過FetchAllAsJSON方法將結果轉換爲JSON格式。在實際應用中,確保正確處理異常和錯誤情況,以保證代碼的健壯性和穩定性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章