Я бы хотел использовать try-with-resources для доступа к моей базе данных, так как мой код достиг уровня сложности, когда всегда трудно запомнить закрытие базы данных при перемещении между потоками - я бы предпочел использовать try-with-resources.
Я использую базовый класс, так как рекомендуется использовать его для случаев, когда у вас есть только одна база данных.(http://javalite.io/database_connection_management, заголовок «БД и базовые классы»)
Я нашел документацию, где это описано, вы можете просто:
try(DB db = new DB()){
db.open();
// Wrong class, I should be using Base
}
Однако, к сожалению, это толькослучай для класса DB, который не рекомендуется использовать.
В ответе переполнения стека здесь сказано, что я могу написать:
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
}
Возможно ли использовать try-with-ресурсы с базовым классом ActiveJDBC?