在rails中没有真正的"预备声明"?

Fre*_*ind 3 activerecord ruby-on-rails prepared-statement

当我们使用ActiveRecord时,我们可以使用:

User.find(:first, :conditions=>["name=?", name])
Run Code Online (Sandbox Code Playgroud)

看起来ActiveRecord正在使用'预备语句',但在查看代码后,我发现ActiveRecord只是使用String.dupconnection.quote()调整内容来构建一个sql,而不是像Java.

那么,没有真正prepared statment的raiils?为什么rails不提供它?

Mik*_*use 5

如果通过预处理语句表示一个以编译形式保存以便更有效执行的SQL,那么你是正确的:它不是在Rails中实现的.有几个原因:

  1. Rails是Web框架 - 它不知道或不关心数据库.默认情况下,Rails使用
    • ActiveRecord用于对象关系映射.如果您愿意,可以更改它 - 它甚至不必是RDBMS.
    • ActiveRecord不了解特定的数据库平台.为此,它依赖于"适配器",它将AR的需求转换为特定于平台的SQL.
    • 一些具有AR适配器的RDBMS支持预处理语句(或等效语句),但其他RDBMS不支持.