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
。
我想使用 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
。