Само ядро (sqlite3.c), на которое ссылается драйвер, воспринимает имя БД как имя файла и напрямую использует его всюду.
Qt'шный драйвер sqlite использует при открытии БД метод sqlite_open16, который не подразумевает передачу параметров открытия...
При этом рядом стоящая альтернативная функция sqlite_open_v2 позволяет в качестве аргумента задать режим SQLITE_OPEN_READONLY (вместо SQLITE_OPEN_READWRITE) и таким образом получить ошибку при попытке открытия несуществующей БД.
Для _open16 видимо ещё не реализовали.
Наверно разработчики ядра не сильно об этом парятся, так как имя БД напрямую используют как имя файла.
Возможно и нам пока что не стоит...
Также есть один косвенный метод -- использовать QSqlDatabase::tables
Она возвращает список таблиц в БД. Соответственно в новосозданной БД таблиц быть не должно.
Жаль только, что таки как минимум оставляет после себя сделанный файл БД (с размером в 0 байт), если такового не было...
Вот примерчик:
// Тестовые ведьмовста
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName( "default.db" );
if( !db.open() )
{
qDebug() << "Ne smoglo otkryt: " << db.lastError();
}
else
{
if( db.tables().isEmpty() )
{
qDebug() << "NEMA";
}
else
{
qDebug() << "Chto-to est";
}
}