mORMot 1.18 第23章 使用纯SQL

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

mORMot 1.18 第23章 使用纯SQL

偶然你可能不想使用ORM,大概由于现有且不可更改的数据库与ORM不兼容而无法使用它。在这些情况下,你仍然可以依靠mORMot的其他功能,同时使用纯SQL。
你可以发出纯SQL下令并以JSON格式获取数据。下面的示例展示了如何使用快速且开源的Zeos数据库库与MariaDB/MySQL一起执行此操纵。
请注意,如安在同一台机器上的多个数据库中对表进行联接是可能的。
  1. program listpeople;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes,
  5.   SynCommons, mORMot, mORMotSQLite3, mORMotDB,
  6.   SynDB, SynDBSQLite3, SynDBDataSet, SynDBZeos,
  7.   SynSQLite3, SynSQLite3Static, DateUtils;
  8. procedure List(const aRawServerName, aDatabaseName, aUserID, aPassWord: RawUTF8);
  9. var
  10.   PropsClass: TSQLDBConnectionPropertiesClass;
  11.   aServerName: RawUTF8;
  12.   U, S: RawUTF8;
  13.   props: TSQLDBConnectionProperties;
  14.   i: integer;
  15. begin
  16.   PropsClass := TSQLDBZEOSConnectionProperties;
  17.   aServerName := TSQLDBZEOSConnectionProperties.URI(dMySQL, aRawServerName);
  18.   props := PropsClass.Create(aServerName, aDatabaseName, aUserID, aPassWord);
  19.   try
  20.     S := 'u.surname,u.givennames,u.departments, u.offices,u.phones,u.email, ' +
  21.          'u.homepage, p.employeeid, h.title ';
  22.     U := props.Execute('SELECT ' + S + ' FROM ' +
  23.                        'import.users u LEFT JOIN ' +
  24.                        'local.person p ON p.email = u.email ' +
  25.                        'LEFT JOIN local.hr h ON p.nexus = h.userid ' +
  26.                        ' WHERE surname LIKE ?',['engelke%']).FetchAllAsJSON(True);
  27.     writeln(U);
  28.   finally
  29.     props.Free;
  30.   end;
  31. end;
  32. begin
  33.   try
  34.     List('blah.erickengelke.com:3306', 'customers', 'userX', 'ChangeMe23');
  35.   except
  36.     on E: Exception do
  37.       writeln('ERROR: ' + E.Message);
  38.   end;
  39. end.
复制代码
你可以使用props.Execute(sql).FetchAllAsJSON来执行返回值的下令,大概使用props.ExecuteNoReturn(sql)当没有预期结果时,比方:
  1. Props.ExecuteNoReturn('DELETE * FROM users WHERE email like ?',['erick%']);
复制代码
注意:在提供的代码示例中,存在一些小错误和不同等之处,好比local.person和local.hr可能不是有效的表名,它们仅用于示例目的。在实际应用中,需要替换为真实的数据库表名。此外,SELECT语句中的字符串连接和字段列表也需要根据实际的数据库结构调整。代码中的?占位符用于参数化查询,以防止SQL注入攻击,并且在实际执行时需要提供相应的参数值。
别的,请注意ExecuteNoReturn用于执行不返回结果的SQL语句,如DELETE、UPDATE或INSERT等。而Execute方法则用于执行返回结果的查询,并通过FetchAllAsJSON方法将结果转换为JSON格式。在实际应用中,确保精确处理异常和错误情况,以包管代码的结实性和稳固性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表