准备语句和性能
所以我一直听说ReadyStatements对性能有好处。
我们有一个Java应用程序,其中我们使用常规的“语句”比使用“准备语句”的次数多。在尝试使用更多PredentStatements的同时,我试图更全面地了解ReadyStatements的工作原理 - 在客户端和服务器端。
因此,如果我们有一些典型的CRUD操作并在应用程序中重复更新对象,那么使用PS是否有帮助?我知道我们每次都必须关闭PS,否则会导致游标泄漏。
那么,它如何帮助提高性能呢?驱动程序是否缓存预编译的语句,并在下次执行 connection.prepareStatement 时为我提供一份副本?或者数据库服务器是否有帮助?
我理解关于ReadyStatements安全优势的论点,我很欣赏下面强调它的答案。但是,我真的想让这次讨论的重点放在ReadyStatements的性能优势上。
更新:当我说更新数据时,我真的意味着这种方法被随机调用几次。我理解下面提供的答案中的优势,它要求在循环中重用语句。
// some code blah blah
update();
// some more code blah blah
update();
....
public void update () throws SQLException{
try{
PreparedStatement ps = connection.prepareStatement("some sql");
ps.setString(1, "foobar1");
ps.setString(2, "foobar2");
ps.execute();
}finally {
ps.close();
}
}
没有办法真正重用'ps'java对象,我知道实际的connection.prepareStatement调用非常昂贵。
这让我回到了最初的问题。这个“一些sql”的PrekedStatement是否仍在我不知道的掩护下被缓存和重用?
我还应该提到,我们支持几个数据库。
提前致谢。