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服务器感兴趣。
答案 0 :(得分:1)
不,预编译语句不会作为任何RDBMS中的存储过程实现。
准备好的语句被解析并保存在服务器端,因此它们可以使用不同的参数值执行多次,但它们不会以存储过程的形式保存。它们以某种依赖于实现的方式保存。例如,作为某种内存中对象,完全在数据库服务器的代码内部。这些不像存储过程那样可调用。
重新评论:
以MySQL为例。
MySQL在很早的时候就不支持预处理语句,因此MySQL JDBC驱动程序可以选择模拟"模拟"准备好的陈述仿真模式的想法是在创建PreparedStatement时将SQL查询字符串保存在JDBC客户端中。 SQL尚未发送到数据库服务器。然后,当您绑定参数并调用execute()时,它会将参数值复制到SQL查询中并发送最终结果。
我不知道其他品牌的JDBC驱动程序是否存在类似的功能。