gpt4 book ai didi

java - 如何在 jooq 中管理 DSLContext? (关闭连接)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:03:05 25 4
gpt4 key购买 nike

这就是我实现我想要的每个 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,如上所示

关于java - 如何在 jooq 中管理 DSLContext? (关闭连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com