【发布时间】:2017-06-05 03:13:51
【问题描述】:
我在互联网上读到它,但我无法得到一些问题的答案。
Q1. 据说在执行 PreparedStatement 时,DBMS 可以直接运行 PreparedStatement SQL 语句,无需先编译。我的问题是当preparedStetement.execute() 被调用时会发生什么? (我的理解:没有任何参数的sql被发送到DBMS,由DBMS编译和缓存以备将来使用。然后发送参数&DBMS用占位符替换它们并执行。)
Q2. 如果下次我使用相同的 sql 执行 PreparedStetement.execute() 会发生什么? (我的理解:DBMS将sql与之前的sql进行比较,如果匹配则取编译的sql,替换参数并执行。)
Q3.如果我偶尔调用数据库,那么准备好的语句将无法帮助我提高性能,因为在此期间数据库缓存将被清除。所以每次都会编译sql。对吧?
【问题讨论】:
-
您的问题在这里有一些答案。 stackoverflow.com/questions/687550/…
-
内部行为高度依赖于 JDBC 驱动程序和 DBMS。在不知道的情况下无法正确回答
-
您要问什么,正如其他 cmets 所说,取决于 DBMS。不过,对于像 Oracle 这样的 DBMS,它基本上是正确的。然而,除了性能之外,prepared statement 的主要原因通常是相关的安全性,以避免 sql 注入
标签: java sql database jdbc prepared-statement