用于基础而不是数据库的尝试资源

时间:2019-04-20 18:03:11

标签: activejdbc

我想使用try-with-resources访问我的数据库,因为我的代码已经达到了一定的复杂度,在线程之间移动时很难总是记得关闭数据库-我宁愿使用try-with资源。

我使用Base类,因为在只有一个数据库的情况下建议使用此类。 (http://javalite.io/database_connection_management,“数据库和基类”标题)

我找到了可以简单描述的文档:

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

但是,不幸的是,这仅是DB类的情况,不建议使用。

在堆栈溢出回复here中,我可以写:

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

  // Type error
}

但是,这会产生IDE错误“类型不兼容。所需的数据库,已找到连接”。如果我强制转换为Base,则导致“ org.sqlite.SQLiteConnection无法强制转换为org.javalite.activejdbc.DB”

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

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

我也尝试过将其保留为连接,但是,当代码块完成时,它不会关闭资源,因此我收到错误消息“由于现有连接仍在当前线程上,因此无法打开新连接,名称:默认”

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

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

是否可以在ActiveJDBC的基类中使用try-with-resources?

1 个答案:

答案 0 :(得分:0)

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

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