2012-05-16 48 views
0

問題:驗證傳入(到程序)sqlite數據庫。在「驗證」下我的意思是檢查數據庫有特定的表,表名,列(名稱,類型,外鍵和主鍵)。Qt中的SQLite驗證

Qt提供了一些方法如何做到這一點,但我仍然無法找到如何檢查表,列類型的外鍵。

有人有這個問題的優雅解決方案?要求的示例=)

回答

1

您需要手動執行此操作。這是一個簡單的(未經測試的)用於檢查所需表格的示例。一旦你用在sqlite_master表提供的信息足夠熟悉

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; 
} 

其他的檢查應該是這一個微不足道。

+0

哦該死的我真的忘了主表。謝謝。這是做到這一點的一種方式嗎? – Torv

+0

@Torv我曾爲一個項目做過一次。這是我的方法,它工作得很好。對於索引,如果你願意使用像QSqlTableModel這樣的「重」類而不是普通的SQL查詢,你可以使用'QSqlIndex QSqlTableModel :: primaryKey()const'。 – dschulz

+0

哎呀..對不起,我的意思是說主鍵,而不是索引。對於索引,完全可以通過查詢上面例子中的'sqlite_master'來完成。 – dschulz