Try-with-resources 用于 Base 而不是 DB

Try-with-resources for Base instead of DB

我想使用 try-with-resources 来访问我的数据库,因为我的代码已经达到了复杂程度,在线程之间移动时很难始终记住关闭数据库 - 我宁愿使用 try-with-resources.

我使用 Base class,因为建议您在只有一个数据库的情况下使用它。 (http://javalite.io/database_connection_management,'DB and Base classes' 标题)

我找到了描述它的文档,您可以简单地:

try(DB db = new DB()){
  db.open();
  // Wrong class, I should be using Base
}

然而,不幸的是,这只是数据库 class 的情况,我不建议使用它。

堆栈溢出回复here据说我可以写:

try(DB db = Base.open(...)){

  // Type error
}

但是,这会产生 IDE 错误 "Incompatible types. Required DB, Found Connection"。如果我施放基础,这会导致 "org.sqlite.SQLiteConnection cannot be cast to org.javalite.activejdbc.DB"

try(DB db = (DB) Base.open(...)){

  // ClassCastException, you can't cast Base to DB
}

我也试过将它保持为连接,但是,当代码块完成时它不会关闭资源,所以我收到错误 "Cannot open a new connection because existing connection is still on current thread, name: default"

try(Connection conn = Base.open(...)){

  // Doesn't close resource after completing code block
}

是否可以将 try-with-resources 与 ActiveJDBC 的基础 class 一起使用?

在只有一个数据库连接的情况下使用class DB绝对没有错。如果您查看 class Base 的代码,您会发现它所做的只是使用硬编码连接名称 default 调用 class DB

建议在一个连接的情况下使用Base class只是为了方便。如果你用DB更方便,那就用DB