Я бы хотел, чтобы у моего приложения был небольшой код на главном, чтобы оно могло создать проверку соединения с БД Java, чтобы проверить, существуют ли база данных и связанные таблицы, если нет, создать базу данных и таблицы в ней.
Вы можете добавить свойство create=true
в URL JDBC.Это создает экземпляр базы данных Derby, если база данных, указанная databaseName
, не существует во время подключения.Если база данных уже существует, выдается предупреждение, но, насколько мне известно, SQLException
не выдается.
Что касается создания таблиц, то лучше всего это делать при запуске приложения до того, как выдоступ к базе данных для типичной транзакционной деятельности.Вам нужно будет запросить системную таблицу SYSTABLES в Derby / JavaDB, чтобы выяснить, существуют ли ваши таблицы.
Connection conn;
try
{
String[] tableNames = {"tableA", "tableB"};
String[] createTableStmts = ... // read the CREATE TABLE SQL statements from a file into this String array. First statement is for the tableA, and so on.
conn = DriverManager.getConnection("jdbc:derby:sampleDB;create=true");
for(int ctr =0 ; ctr < tableNames.length; ctr++)
{
PreparedStatement pStmt = conn.prepareStatement("SELECT t.tablename FROM sys.systables t WHERE t.tablename = ?");
pStmt.setString(1, tableNames[ctr]);
ResultSet rs = pStmt.executeQuery();
if(!rs.next())
{
// Create the table
Statement stmt = conn.createStatement();
stmt.executeUpdate(createTableStmts[ctr]);
stmt.close();
}
rs.close();
pStmt.close();
}
}
catch (SQLException e)
{
throw new RuntimeException("Problem starting the app...", e);
}
Затем могут быть созданы любые несуществующие таблицы.Это, конечно, не очень хорошая практика, если ваше приложение имеет несколько версий, и схема меняется от одной версии приложения к другой.Если вам необходимо обработать такой сценарий, вы должны сохранить версию приложения в отдельной таблице (которая обычно не меняется в разных версиях), а затем применить дельта-сценарии базы данных, относящиеся к более новой версии, чтобы перенести вашу базу данных из более старой версии.,Рекомендуется использовать инструменты управления изменениями базы данных, такие как DbDeploy или LiquiBase .Под капотом инструменты выполняют ту же операцию, сохраняя номер версии приложения в таблице, и выполняют дельта-сценарии с версиями, превышающими версию в базе данных.
В заключительном примечании нетсущественная разница между JavaDB и Apache Derby .