DBMS是否以DBMS服务器上的存储过程的形式从预准备语句中保存已编译的查询?

时间:2018-06-13 17:24:28

标签: stored-procedures jdbc prepared-statement rdbms

DBMS是否在DBMS服务器上以存储过程的形式在JDBC中保存来自预准备语句的已编译查询?我认为准备好的语句不是DBMS中的概念,而是JDBC中的概念,所以我想知道它是如何在DBMS服务器端实现的。

我的问题来自Why do Parameterized queries allow for moving user data out of string to be interpreted?

我看了DIfference Between Stored Procedures and Prepared Statements..?,但找不到答案。

感谢。

我对PostgreSQL,MySQL或SQL服务器感兴趣。

1 个答案:

答案 0 :(得分:1)

不,预编译语句不会作为任何RDBMS中的存储过程实现。

准备好的语句被解析并保存在服务器端,因此它们可以使用不同的参数值执行多次,但它们不会以存储过程的形式保存。它们以某种依赖于实现的方式保存。例如,作为某种内存中对象,完全在数据库服务器的代码内部。这些不像存储过程那样可调用。

重新评论:

以MySQL为例。

MySQL在很早的时候就不支持预处理语句,因此MySQL JDBC驱动程序可以选择模拟"模拟"准备好的陈述仿真模式的想法是在创建PreparedStatement时将SQL查询字符串保存在JDBC客户端中。 SQL尚未发送到数据库服务器。然后,当您绑定参数并调用execute()时,它会将参数值复制到SQL查询中并发送最终结果。

我不知道其他品牌的JDBC驱动程序是否存在类似的功能。