Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSQLITE
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
Litkevich Yuriy
Тут обнаружил такую штуку, никогда со встраиваемыми БД не работал с SQLITE в том числе.
если написать такие строчки кода:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("app.db");

то если БД нет то будет создана, нашел это удобным, но не всегда.
Можно ли проверить существует БД или нет?

Как вариант проверять наличие файла, но хотел средствами для работы с БД.
Tonal
Ну самой-то SQLite можно указать и другое поведение. Но вот можно ли это через драйвер Qt...
Frigolem
Само ядро (sqlite3.c), на которое ссылается драйвер, воспринимает имя БД как имя файла и напрямую использует его всюду.

Qt'шный драйвер sqlite использует при открытии БД метод sqlite_open16, который не подразумевает передачу параметров открытия... :unsure:
При этом рядом стоящая альтернативная функция sqlite_open_v2 позволяет в качестве аргумента задать режим SQLITE_OPEN_READONLY (вместо SQLITE_OPEN_READWRITE) и таким образом получить ошибку при попытке открытия несуществующей БД.
Для _open16 видимо ещё не реализовали.

Наверно разработчики ядра не сильно об этом парятся, так как имя БД напрямую используют как имя файла.
Возможно и нам пока что не стоит... :huh:


Также есть один косвенный метод -- использовать QSqlDatabase::tables
Она возвращает список таблиц в БД. Соответственно в новосозданной БД таблиц быть не должно. :)
Жаль только, что таки как минимум оставляет после себя сделанный файл БД (с размером в 0 байт), если такового не было... :unsure:

Вот примерчик:
    // Тестовые ведьмовста
    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";
        }
    }
Litkevich Yuriy
Frigolem, я эту проблему иначе решил, просто проверяю существует ли файл, средствами QFile.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.