Obsługa błędów SQLite w QT

0

Piszę sobie programik korzystający ze sqllite. Niestety okazało się, że obsługa tego w qt jest dziwna. Nie da się wychwycić błędów. Biblioteka QSql pozwala otworzyć dowolny plik jako bazę danych sqllite. A jak nie ma pliku to sama tworzy pusty. Otwierałem już w ten sposób obrazek png, /dev/null. Jedyny błąd udało mi się wygenerować, jak próbowałem otworzyć plik w nieistniejącym katalogu, pewnie też na uprawnieniach się wysypie. Nie mam całkiem pomysłu jak sprawdzić czy otworzony jest prawidłowy plik. Nawet select na pliku binarnym nie rzuca błędami, po prostu zwraca pusty wynik. Czy ktoś zna jakąś metodę sprawdzenia czy została otworzona baza sql lite, a nie np /dev/urandom? Czy trzeba napisać własną bibliotekę, która sparsuje plik i powie czy to baza sqllite czy coś innego? Chciałbym uniknąć prymitywnych metod typu odczyt rekodu z tabeli, który teoretycznie powinien tam być i count zwróci liczbę rekordów różną od zera.

3

Sprawdź typ MIME pliku. Qt od wersji 5.0 posiada tę funkcjonalność.

QMimeDatabase db;
QMimeType mime = db.mimeTypeForFile(inputFile);

if (!mime.inherits("application/vnd.sqlite3")) {
    // obsługa przypadku pliku o innej zawartości
}
0
Ferdynand Lipski napisał(a):

Sprawdź typ MIME pliku. Qt od wersji 5.0 posiada tę funkcjonalność.

QMimeDatabase db;
QMimeType mime = db.mimeTypeForFile(inputFile);

if (!mime.inherits("application/vnd.sqlite3")) {
    // obsługa przypadku pliku o innej zawartości
}

Działa, ale oczywiście są zabawy. Otóż db.open dla nieistniejącego pliku tworzy plik pusty, dopiero query "create table" albo coś podobnego to wtedy qt zapisuje mime i inne rzeczy do bazy. Czyli trzeba podwójnego ifa, najpierw czy plik istnieje albo czy tworzymy nową bazę danych, a dopiero potem mime sprawdzamy. Obsługa SQL to jest mocno po macoszemu w qt creator, ręcznie trzeba dodawać do pro, że ma obsługiwać sql.

0

Jak ktoś używał Delphi do tworzenia baz danych to wszystko inne wyglada jakby było prowizorką,
albo jeszcze mało widziałem w C++ ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1