检查表是否存在

时间:2011-11-26 10:10:17

标签: qt sqlite

我使用这个SELECT name FROM sqlite_master WHERE type = "table" AND name = 'create_organization';来检查名为create_organization的表是否存在并且它是否有效。但是我想使用qt来找出它。我正在尝试

 QSqlQuery query;
    QString tableName = "employee_datastores";
    QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = %1 ").arg(tableName);
    query.prepare(sqlQuery);
    query.bindValue(":table", "table");
    query.exec();
    int fieldNo = query.record().indexOf("employee_datastore_name");
    while (query.next()) {
        QString employee_ds_name = query.value(fieldNo).toString();
        qDebug() << "Table Name" << employee_ds_name ;
    }

但它不起作用。

4 个答案:

答案 0 :(得分:8)

QSqlDatabase :: tables()能为您提供所需内容吗?例如,您可以尝试:

if ( database.tables().contains( QLatin1String("employee_datastores") ) {
    ...
}

答案 1 :(得分:2)

你可以这样解决:

QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = '%1' ").arg(tableName);
query.prepare(sqlQuery);
query.bindValue(":table", "table");
query.exec();

但为什么要混合绑定值和“哑”字符串替换?

QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = :tablename ");
query.prepare(sqlQuery);
query.bindValue(":table", "table");
query.bindValue(":tablename", tableName);
query.exec();

答案 2 :(得分:0)

这解决了它。谢谢Mat。

QSqlQuery query;
    QString tableName = "structure";
    QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = '%1' ").arg(tableName);
    query.prepare(sqlQuery);
    query.bindValue(":table", "table");
    query.exec();
    int fieldNo = query.record().indexOf("name");
    while (query.next()) {
        QString _name = query.value(fieldNo).toString();
        qDebug() << "Table Name" << _name ;
    }

答案 3 :(得分:0)

使用database.tables(QSql :: AllTables)这将向您显示所有表,包括主表。只需对正确答案进行一小段编辑:我的编辑是(QSql :: AllTables)

if ( database.tables(QSql::AllTables).contains( QLatin1String("employee_datastores") ) {
... }