Piszę aplikację przy użyciu bazy danych java i sqlite. Tworzę wiele insertów w bazie danych. Za każdym razem przed wstawieniem użyłem następującej instrukcji SQL i wykonałem ją przy pomocy java
CREATE TABLE IF NOT EXISTS TABLE_NAME "
+ " (ID INT NOT NULL, "
+ " PERCENT INT NOT NULL, "
+ " TASK_DATA VARCHAR(1000) ,"
+ " CONSTRAINT pk_progressID PRIMARY KEY (ID))
Jednak nie jest to dobrą praktyką do wykonywania tego oświadczenia za każdym razem. Jaka jest alternatywa taka, że sprawdza również, czy tabela istnieje, czy też nie, i tworzy ją również, jeśli tak nie jest?
Odpowiedzi:
2 dla odpowiedzi № 1Ten problem nazywa się "migracja bazy danych". Na każdym połączeniu bazy danych dokonanym przez twoją aplikację musisz znać strukturę bazy danych, a dane są w znanym oczekiwanym stanie i konfiguracji.
Jednym z rozwiązań jest wewnętrzne oznakowanie bieżącego stanu bazy danych, rodzaj numeru wersji. Oczywiście tabela bazy danych może być idealnym miejscem do przechowywania informacji o wersji.
Mogę iść dalej i poprowadzić cię przez tego rodzajuwersjonowanie, które można wykonać, jak uruchomić aplikację SQL i kod Java, aby zaktualizować wszelkie wystąpienia bazy danych zgodnie z najnowszymi oczekiwaniami. Ale nie muszę robić tego wyjaśnienia.
Dwa bardzo dobre projekty zostały już zbudowane, aby wykonać te zadania związane z migracją bazy danych. Brak kodu do napisania! Każdy z tych projektów można podłączyć do Twojej aplikacji.
Za każdym razem aplikacja łączy się z bazą danychsprawdza najnowsze znane informacje o wersji przechowywane w dodatkowej tabeli. Jeśli instancja bazy danych jest nieaktualna, narzędzia te uruchamiają skrypty SQL i / lub kod Java potrzebny do tworzenia / modyfikowania definicji tabel, wstawiania / modyfikowania / usuwania wierszy i tak dalej.
Oczywiście musisz starannie pisać, testować i archiwizować te skrypty SQL i aktualizować kod Java podczas tworzenia projektu.
1 dla odpowiedzi nr 2
Jest to powszechny problem aktualizacji wersji oprogramowania i starych danych bazy danych.
Najlepiej mieć wpis w bazie danych z własnym numerem wersji.
Następnie przy uruchomieniu programu możesz sprawdzić i zaktualizować odpowiednio, nawet w kilku wersjach, w zdefiniowany sposób.
while (database.version() < software.version) {
software.updateToNextFrom(database.version());
}