Как перезаписать БД Java?

В моем приложении используется встроенная база данных Java. Похожий вопрос спрашивает, как создать Java DB, если целевая база данных еще не существует; добавление атрибута create=true дает желаемый результат, например:

     conn = DriverManager.getConnection("jdbc:derby:mydatabase;create=true",props);

Но я хотел бы перезаписать базу данных, если она существует. Я полагаю, я мог бы просто удалить и воссоздать родительский каталог базы данных. Есть ли лучшее решение?


person Austin D    schedule 28.02.2016    source источник
comment
Я не думаю, что вам следует просто удалить/создать каталог напрямую. База данных должна поддерживать метаданные о базе данных в какой-либо таблице каталога (словаря данных) - они могут стать недействительными. Вы можете просто обрезать все свои таблицы. Я не знаю, сколько у вас таблиц или записей. Это много?   -  person uncaught_exception    schedule 28.02.2016


Ответы (1)


Встроенная база данных Derby полностью содержится в папке базы данных в файловой системе, поэтому удаление этой папки и повторное создание базы данных с помощью create=true будет идеальным.

Также будет совершенно нормально выдавать операторы DROP TABLE и CREATE TABLE для всех таблиц (и индексов, представлений и т. д.) в вашей базе данных.

Оба подхода достигают результата. Какое из них является «лучшим решением» для вашего приложения, действительно зависит от вас.

В своих приложениях я стремлюсь отделить операторы DDL таблицы/индекса/представления/ограничения от собственно логики приложения, а также склоняюсь к тому, чтобы эти наборы операторов DDL были идемпотентными; то есть эти операторы DDL всегда начинаются с удаления предыдущей таблицы/представления/индекса/и т. д. объекты, а затем создавать новые, чтобы я мог запускать эти операторы DDL в любое время во время разработки приложения, чтобы воссоздать объекты моей базы данных с нуля.

Но ваше приложение может быть не так структурировано, и в этом случае, возможно, вам будет проще физически удалить всю папку каталога.

person Bryan Pendleton    schedule 28.02.2016