问题:验证传入(编程)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
表中可用的信息足够熟悉,其他检查应该与此一样微不足道。