这就是我实现所需的每个jooq查询的方式。

UtilClass{

 //one per table more or less
 static void methodA(){

  //my method
  Connection con = MySQLConnection.getConexion(); //open
  DSLContext create = DSL.using(con, SQLDialect.MYSQL); //open

  /* my logic and jooq querys */ //The code !!!!!!!

  try {

    if ( con != null )
       con.close(); //close
  } catch (SQLException e) {

  } //close

  con=null; //close
  create=null; //close
 }
}

我在这里工作过度吗?/保持上下文和连接打开安全吗?

万一可以安全地将其保持打开状态,我宁愿每个UtilClass使用1个静态字段DSLContext(并且只有注释的部分在我的方法中)。因为要封装每个表的方法(或多或少),所以我将为每个UtilClass打开一个连接。

最佳答案

DSLContext通常不是资源,因此您可以将其保持“打开”状态,即,可以让垃圾收集器为您收集它。

但是,JDBC Connection是一种资源,并且作为所有资源,您应该始终显式关闭它。在Java 7+中关闭资源的正确方法是使用try-with-resources语句:

static void methodA() {
    try (Connection con = MySQLConnection.getConexion()) {
        DSLContext ctx = DSL.using(con, SQLDialect.MYSQL); //open

        /* my logic and jooq queries */

        // "ctx" goes out of scope here, and can be garbage-collected
    }   // "con" will be closed here by the try-with-resources statement
 }

More information about the try-with-resources statement can be seen here。另请注意jOOQ tutorial uses the try-with-resources statement when using standalone JDBC connections
DSLContext什么时候是资源?

上面的异常(exception)情况是,当您让自己的DSLContext实例管理Connection本身时,例如通过传递如下的连接URL:
try (DSLContext ctx = DSL.using("jdbc:url:something", "username", "password")) {
}

在这种情况下,您将需要如上所述对close()进行DSLContext

08-06 17:25