Java 如何在jooq中管理DSLContext?(紧密连接)

Java 如何在jooq中管理DSLContext?(紧密连接),java,jooq,Java,Jooq,这就是我如何实现我想要的每个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 q

这就是我如何实现我想要的每个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
连接是一种资源,与所有资源一样,您应该始终显式地关闭它。在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
 }
。请同时注意

什么时候
DSLContext
是资源? 上述情况的一个例外是,当您让您的
DSLContext
实例管理
连接
本身时,例如通过如下方式传递连接URL:

try (DSLContext ctx = DSL.using("jdbc:url:something", "username", "password")) {
}

在这种情况下,您需要
close()
如上所示的
DSLContext
,谢谢,我理解
请使用参考资料尝试
。回答得很好。(jOOQ很棒)调用
DSL。将
数据源一起使用
算作让“
DSLContext
实例管理
连接本身”?换句话说,
DSL.using(DataSource,sqldial)
是否返回需要关闭的
DSLContext
。在幕后,使用了
DataSourceConnectionProvider
,并且在每次查询执行后自动关闭
连接
,从而产生
DataSource
附加到
Connection.close()
的任何语义,感谢您的快速回答!因此,如果我使用由
数据源创建的
DSLContext
DSLContext.transaction
是否对其主体中的所有查询使用单个JDBC
连接
,并在事务结束时关闭它?是的。关于这一点,您几乎可以问一个新的堆栈溢出问题,在这里我可以详细说明一下:)