0

问题:验证传入(编程)sqlite 数据库。在“验证”下,我的意思是检查数据库是否具有特定的表、表名、列(名称、类型、外键和主键)。

Qt 提供了一些方法,但我仍然找不到如何检查表、列类型中的外键。

有人优雅地解决了这个问题吗?也需要示例=)

4

1 回答 1

1

您需要手动完成。这是一个用于检查所需表的简单(未经测试)示例。

bool hasRequiredTables()
{
    QStringList reqTables;
    QStringList tables;

    reqTables<< "table1" << "table2" << "table3" << "etc";

    QString sql = "SELECT name FROM sqlite_master"
                  " WHERE type = 'table'"
                  " AND name NOT LIKE 'sqlite%';";

    QSqlQuery query ( sql, QSqlDatabase::database () );

    if ( !query.isValid() ){
       return false;
    }

    while ( query.next() )
       tables.append ( query.value ( 0 ).toString() );


    foreach ( QString t, reqTables ){
        if ( !tables.contains ( t, Qt::CaseInsensitive ) ){
           //qDebug() << "non-existent table: " << t;
           return false;
        }
    }

    // OK
    return true;
}

一旦您对sqlite_master表中可用的信息足够熟悉,其他检查应该与此一样微不足道。

于 2012-05-16T06:13:50.370 回答