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 に答える