Stored procedures DBMS是否在DBMS服务器上以存储过程的形式保存来自准备语句的编译查询?

Stored procedures DBMS是否在DBMS服务器上以存储过程的形式保存来自准备语句的编译查询?,stored-procedures,jdbc,prepared-statement,rdbms,Stored Procedures,Jdbc,Prepared Statement,Rdbms,DBMS是否在DBMS服务器上以存储过程的形式保存来自JDBC中准备语句的编译查询?我认为prepared语句不是DBMS中的概念,而是JDBC中的概念,所以我想知道它是如何在DBMS服务器端实现的 我的问题来自 我读了,但没有找到我的答案 谢谢 我依次对PostgreSQL、MySQL或SQL server感兴趣。不,在任何RDBMS中,准备好的语句都不是作为存储过程实现的 准备好的语句被解析并保存在服务器端,因此可以使用不同的参数值多次执行它们,但它们不会以存储过程的形式保存。它们以某种依赖

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

我的问题来自

我读了,但没有找到我的答案

谢谢


我依次对PostgreSQL、MySQL或SQL server感兴趣。

不,在任何RDBMS中,准备好的语句都不是作为存储过程实现的

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


请回复您的评论:

以MySQL为例

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


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

如果不指定特定的数据库系统,从技术上来说,回答是不可能的(尽管对于大多数(如果不是全部的话),答案可能是“否”)。在DBMS中,准备语句不是一个概念,在大多数情况下,这也是错误的。但是问多个问题是另一个让你的问题过于宽泛的原因。谢谢。更新。那么JDBC中的预处理语句是否在RDBMS服务器端实现为预处理语句呢?您认为询问三种不同的数据库系统会使这一点更好吗?所以我使用“或”,其中任何一种都令人满意谢谢。请问JDBC中的RDBMS语句是如何实现的?JDBC中的prepared语句是否在RDBMS的prepared语句中实现?默认情况下使用MySQL JDBC驱动程序中模拟prepared语句的选项(请参见
UseServerPrepsmts
defaults to false in)@markrotVeel,感谢您的更正,我已编辑了匹配的答案。我错误地认为UseServerPrepsmts默认为true!我的错误。我不得不承认,我有点惊讶它仍然没有被默认使用。我的错。我评论中的最后一个问题是“JDBC中的预处理语句是否按照RDBMS的预处理语句实现?”