Попробуйте с ресурсами для базы вместо БД - PullRequest
0 голосов
/ 20 апреля 2019

Я бы хотел использовать 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?

1 Ответ

0 голосов
/ 21 апреля 2019

Нет ничего плохого в использовании класса DB в случае только одного подключения к базе данных. Если вы посмотрите на код класса Base , вы увидите, что все, что он делает, это вызывает класс DB с жестко запрограммированным именем соединения default.

Рекомендация использовать класс Base в случае одного подключения просто для удобства. Если вам удобнее использовать DB, тогда используйте DB.

...