Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于存储PreparedStatements的EHCache_Java_Caching_Prepared Statement_Ehcache - Fatal编程技术网

Java 用于存储PreparedStatements的EHCache

Java 用于存储PreparedStatements的EHCache,java,caching,prepared-statement,ehcache,Java,Caching,Prepared Statement,Ehcache,我们有一个广泛使用数据库的复杂应用程序。该应用程序只使用普通的JDBC连接,正如我所看到的,在大多数情况下,我们总是重新创建一个PreparedStatement来运行sql,即使我们多次运行相同的sql。 JDBC连接有一个包装器,如 public class ConnectionWrapper { protected Connection connection; public PreparedStatement getPreparedStatement(Stri

我们有一个广泛使用数据库的复杂应用程序。该应用程序只使用普通的JDBC连接,正如我所看到的,在大多数情况下,我们总是重新创建一个PreparedStatement来运行sql,即使我们多次运行相同的sql。 JDBC连接有一个包装器,如

  public class ConnectionWrapper {
      protected Connection connection;

      public PreparedStatement getPreparedStatement(String sql) {
        return connection.prepareStatement(sql);
      }
在不重写整个应用程序的情况下,最好在包装器中添加一个缓存,该包装器根据sql存储PreparedStatement,然后从缓存返回语句。当我们关闭连接时,我们也会清理缓存。 您认为在这里编程使用类似EHCache的东西是个好主意吗

更新:
在整个会话期间使用相同的连接,获得新的物理连接将触发缓存清理

我不担心缓存PreparedStatement,因为它们是预编译的,然后由RDBMS缓存(如果您的RDBMS支持的话)。如果您担心数据库的大量使用,可能应该缓存数据。如果是这样,为什么不呢?我认为这里不需要第三方缓存。Buhake:谢谢,你的意思是,即使我重新创建PreparedStatement,连接也会从JDBC级别的cahce返回一些东西,对吗?@slowy,糟糕的建议。PreparedStatement可能会被关闭,特别是当它们在连接池中或由RDBMS管理以供非活动使用时。返回的PreparedStatement可以来自RDBMS缓存的PreparedStatement,因此您基本上无法重新创建它。您需要了解JDBC供应商在PreparedStatement和JDBC级缓存方面提供了什么。那不应该是你的问题。您应该关注数据以及如何优化应用程序以更快、更高效地检索数据。