Я пишу приложение Java, использующее SQLite через JDBC для сохранения.Java: проверка и инициализация базы данных
Что мне нужно делать при запуске приложения является:
- Если БД не существует, создайте его с правой схемой
- Если БД существует, проверьте, если БД имеет право схема
Для создания БД я думал об экстернализации SQL-команд, необходимых для создания структуры (например, CREATE TABLE ...) во внешнем файле, загрузки ее во время выполнения и ее выполнения. Я думал об использовании BufferedReader
с .readLine()
, а затем передал каждую команду SQL на Statement.executeUpdate()
. Есть ли более разумный способ сделать это?
Что касается проверки запуска схемы базы данных, в то время как я считаю, что это следует считать «хорошим дизайном», я не знаю, на практике ли это может быть излишним или бесполезным. Одно решение, которое я придумал, но имеет тот недостаток, что «поставщик зависимый» заключается в следующем:
- Создание БД с использованием известного префикса для всех имен структур (например,
nwe_
) - запрос
sqlite_master
стол сWHERE name LIKE 'nwe_%'
- Сравните содержание
SQL
столбца с командным файлом SQL я использовал для создания БДА
Опять же, есть какой-то разумный способ сделать это? (может быть, не «зависит от поставщика», но это в то время не для меня большая проблема)
Спасибо.
Что касается первого вопроса, то я не вижу, как чтение в текстовом файле команд SQL любая другая, чем положить те же команды SQL в «статической конечной строке». Вы должны где-то выписывать SQL; что вы получаете за счет того, что вне его кода? – RustyTheBoyRobot
Что касается вашего второго вопроса, каков ваш прецедент, когда ваша схема БД волшебным образом отличается от того, который вы создали изначально и используете во всей вашей программе? – RustyTheBoyRobot
@RustyTheBoyRobot 1: Я не большой поклонник жестко закодированных строк, потому что, если вам нужно изменить содержимое строк, вам нужно перестроить приложение. Я ошибаюсь? 2-: Возможно, повреждена БД или пользователь заставляет приложение указывать на неправильный файл DB. –