211人参与 • 2024-05-12 • Delphi
有时你可能不想使用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.person
和local.hr
可能不是有效的表名,它们仅用于示例目的。在实际应用中,需要替换为真实的数据库表名。此外,select
语句中的字符串连接和字段列表也需要根据实际的数据库结构调整。代码中的?
占位符用于参数化查询,以防止sql注入攻击,并且在实际执行时需要提供相应的参数值。
另外,请注意executenoreturn
用于执行不返回结果的sql语句,如delete
、update
或insert
等。而execute
方法则用于执行返回结果的查询,并通过fetchallasjson
方法将结果转换为json格式。在实际应用中,确保正确处理异常和错误情况,以保证代码的健壮性和稳定性。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论