PreparedStatement 如何在 Java 内部工作:SQL 的编译和缓存如何工作

Sum*_*mit 6 java sql database jdbc prepared-statement

我在互联网上阅读了它,但我无法得到某些查询的答案。

一季度。据说在执行PreparedStatement时,DBMS可以直接运行PreparedStatement SQL语句,无需先编译。我的问题是当preparedStetement.execute() 被调用时会发生什么?(我的理解:没有任何参数的sql被发送到DBMS,由DBMS编译和缓存以备将来使用。然后发送参数&DBMS用占位符替换它们&执行。)

Q2。如果下次我使用相同的 sql 执行 PreparedStetement.execute() 那么会发生什么?(我的理解:DBMS 将 sql 与之前的 sql 进行比较,如果匹配则采用编译后的 sql,替换参数并执行。)

Q3。如果我偶尔调用数据库,那么准备好的语句不会帮助我提高性能,因为在此期间数据库缓存将被清除。所以每次都会编译sql。对?

rko*_*egi 3

java.sql.PreparedStatement是JRE定义的API。

实际的内部行为execute()取决于 DBMS 供应商提供的 JDBC 驱动程序实现。

例如,有一些sending statement to server没有意义的嵌入式数据库(SQLite、H2)。

您应该查阅您正在使用的 JDBC 驱动程序的文档。