在循环内创建预准备语句

5 java sql jdbc prepared-statement

澄清一下:我知道创建PreparedStatement循环外部是正确的.出于好奇,我问过这个问题.


让我们假设我正在创建一个PreparedStatement内部循环,始终使用相同的SQL查询.

final String sql = "INSERT INTO ...";
while (condition) {
   ...
   PreparedStatement statement = connection.prepareStatement(sql);
   // Fill values of the prepared statement
   // Execute statement
   ...
}
Run Code Online (Sandbox Code Playgroud)

这是无用的,因为PreparedStatement对象总是重新创建?或者底层数据库是否认识到它始终与PreparedStatement创建它的SQL查询相同并重用它?

Kum*_*tra 7

1.如果你在整个循环中使用相同 PreparedStatement的东西,那么你最好保持 PreparedStatement 循环外部.

2.如果你的sql语句在循环中不断变化,那么只有它在循环中使用它的价值.

3.此外,如果它不断变化,那么只需使用Statement 而不是 PreparedStatement,否则PreparedStatement的目的就会随着你不断变化而丢失.


Geo*_*man 4

有些驱动程序会缓存准备好的语句,是的。例如,浏览以下 Oracle 文档: http://docs.oracle.com/cd/B10501_01/java.920/a96654/stmtcach.htm

我不认为有什么要求对所有驱动程序都是如此,尽管这似乎是许多 JDBC 驱动程序的一个可能的功能。听起来 MySQL 可能不会这样做: How to use MySQL prepared statements caching?

也就是说,如果您确实想有效地使用准备好的语句,那么保留在每次循环迭代中使用的准备好的语句的实例似乎更有意义。