相关疑难解决方法(0)

Statement和PreparedStatement之间的区别

Prepared Statement是一个稍微强大的Statement语句版本,并且应该始终至少与Statement一样快速和容易处理.
准备好的声明可以参数化

大多数关系数据库分四步处理JDBC/SQL查询:

  1. 解析传入的SQL查询
  2. 编译SQL查询
  3. 规划/优化数据采集路径
  4. 执行优化的查询/获取并返回数据

对于发送到数据库的每个SQL查询,语句将始终执行上述四个步骤.准备语句在上面的执行过程中预先执行步骤(1) - (3).因此,在创建Prepared Statement时,会立即执行一些预优化.其效果是减少执行时数据库引擎的负载.

现在我的问题是 - "使用预备声明还有其他优势吗?"

java jdbc

213
推荐指数
10
解决办法
24万
查看次数

准备好的声明和表现

所以我一直听说PreparedStatements对性能有好处.

我们有一个Java应用程序,我们使用常规的'Statement'比使用'PreparedStatement'更多.在尝试使用更多PreparedStatements时,我试图更全面地了解PreparedStatements如何工作 - 在客户端和服务器端.

因此,如果我们有一些典型的CRUD操作并在应用程序中重复更新对象,它是否有助于使用PS?我知道每次都要关闭PS,否则会导致光标泄漏.

那么它对性能有何帮助?驱动程序是否缓存预编译语句,并在下次进行connection.prepareStatement时给我一份副本?或者DB服务器有帮助吗?

我理解关于PreparedStatements的安全性好处的论点,我理解下面强调它的答案.但是,我真的希望将讨论重点放在PreparedStatements的性能优势上.

更新:当我说更新数据时,我真的意味着更多的方法随机被多次调用.我理解下面提供的答案中的优点,它要求在循环中重用语句.

    // 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();

 }

}
Run Code Online (Sandbox Code Playgroud)

没有办法实际重用'ps'java对象,我理解实际的connection.prepareStatement调用非常昂贵.

这让我回到原来的问题.这个"一些sql"PreparedStatement仍然被缓存并重新使用在我不知道的封面下吗?

我还要提一下,我们支持几个数据库.

提前致谢.

java database performance prepared-statement

53
推荐指数
4
解决办法
3万
查看次数

哪个更快?声明或PreparedStatement

通常,在网络中可以找到这样的代码:

private static final String SQL = "SELECT * FROM table_name";
....
Run Code Online (Sandbox Code Playgroud)

并且对于此SQL查询使用PreparedStatement.为什么?
据我所知,PreparedStatement花时间预编译SQL语句.事实证明,Statement比PreparedStatement更快.或者我错了?

java jdbc

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×3

jdbc ×2

database ×1

performance ×1

prepared-statement ×1