【问题标题】:Storing prepared statements as static members将准备好的语句存储为静态成员
【发布时间】:2014-03-02 06:39:14
【问题描述】:

我有 15 条准备好的语句,我将在整个应用程序中非常频繁地使用它们。其中一些会在单个任务中被调用数百万次。

我决定使用准备好的语句,因为将常规语句解析一百万次似乎不是一个好主意。

我打算创建一个实用程序类来管理所有与数据库相关的东西和所有准备好的语句。这些语句将存储为静态成员,我可以通过传入适当的参数来调用它们。

将准备好的语句存储为我应该注意的静态成员有什么问题吗?

我正在使用sqlite-jdbc,如果这有影响的话。

编辑:

这就是我计划管理我准备好的报表的方式

class DBUtils {

   private static PreparedStatement psInsertPerson;

   public static void createStatements() {
      // assuming a connection has been set up already
      psInsertPerson = conn.prepareStatement( ... );
   }

   public static void insertPerson( ... ) {
      psInsertPerson.set...
      psInsert.addBatch();

      // figure out when to perform batch insertion at some point
   }
}

【问题讨论】:

  • 在初始化这些连接之前,你将如何保证连接存在?将它们作为实例变量,这样您可以更好地控制它们的创建时间不是更好吗?
  • 能否重写查询以一次选择更多记录以减少查询次数?你可以创建一个存储过程而不是发送查询吗?
  • @DavidWallace 我可以通过在任务开始之前建立连接来解决这个问题,或者只是在应用程序的生命周期内建立连接。
  • @John 其中大部分是 INSERT 或 UPDATE 查询。我可以完全控制数据库,因为我是动态创建数据库并在完成后销毁它,所以如果存储过程比准备好的语句更可取,我可以重新考虑我的设计。
  • @Mxyl 哦!先生,我有东西给你。介绍大容量插入。 msdn.microsoft.com/en-us/library/ms188365.aspx

标签: java sql sqlite jdbc


【解决方案1】:

不要使用静态数据。使用 Apache DBCP 连接池作为您的数据源,并将其配置为池 PreparedStatements。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多