問題:着信(プログラムへ)sqliteデータベースの検証。「検証」とは、データベースに特定のテーブル、テーブル名、列(名前、タイプ、外部キー、および主キー)があることを確認することを意味します。
Qtはそれを行う方法をいくつか提供しますが、テーブル、列タイプの外部キーをチェックする方法をまだ見つけることができません。
この問題のエレガントな解決策はありますか?必要な例も=)
手動で行う必要があります。必要なテーブルをチェックするための簡単な(テストされていない)例を次に示します。
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
表で利用可能な情報に十分に精通していれば、他のチェックはこれと同じくらい簡単なはずです。