当我们使用ActiveRecord时,我们可以使用:
User.find(:first, :conditions=>["name=?", name])
看起来ActiveRecord正在使用'预备语句',但在查看代码之后,我发现ActiveRecord只是使用String.dup
和connection.quote()
来调整内容以构建一个sql,而不是像Java一样。
那么,raiils中没有真正的prepared statment
?为什么rails没有提供呢?
答案 0 :(得分:5)
如果准备好的语句是指一个以编译形式保存以便更有效执行的SQL,那么你是正确的:它不是在Rails中实现的。这有几个原因:
答案 1 :(得分:3)
Rails 3.1(或更高版本)支持预准备语句。您创建的每个新查询都将添加到预准备语句池中。如果您正在使用MySql DB,它仍然不支持预准备语句,因为在没有预准备语句的情况下,在MySql中使用预准备语句会降低性能。 Here是Pat Shaughnessy关于此的好文章。
答案 2 :(得分:2)
在许多(大多数?)方式中,DB View是一个准备好的语句。使用ActiveRecord很容易使用视图。只需在数据库中声明视图(我使用rake任务),然后通过ActiveRecord访问它。
非常适合对复杂SQL的只读访问。从解析/计算SQL所需的许多步骤中保存数据库。