如果我一次只使用一个Statement
,那么将它与我的Connection
一起缓存是值得的。我已经缓存了连接,所以我几乎可以免费缓存语句。
基本上我想我是在询问创建语句是否有任何成本/开销。我完全理解创建预准备语句的好处。我在这里专门讨论Connection.createStatement()
。
答案 0 :(得分:4)
声明的成本无法与其他因素无关地量化;例如数据库,JDBC驱动程序,语句中的SQL等。
您可以确定创建Statement(或PreparedStatement)并在第一次执行时会产生开销。但是,它很可能不会对整个应用程序的性能产生重大影响。如果不是这样,那么实现缓存代码将只是浪费精力。
你不应该猜测这是否(或不是)值得进行优化。你应该做什么让你的程序运行,然后分析它,然后使用分析数据来确定需要优化的内容。如果花费大量时间执行相同的查询,那么可能缓存将有所帮助,也许不会。尝试一下,看看它是否会对性能产生显着影响。
答案 1 :(得分:0)
对开源jdbc驱动程序(jtds)的一些研究表明,每个Statement创建的对象开销都是如此。我试图计算每次想要查询数据库时创建新Statement
的成本,而不是保留一个缓存的并重新使用它:
Connection
- 大概是缓存得那么微不足道。TdsCore
- 看起来像协议实现,但它的缓存非常小。ResultSet
。ArrayList
批量商品。ArrayList
的{{1}}。因此看起来ResultSet
的成本中最高比例涉及任何已运行的查询所留下的内容。