2011-11-26 79 views
2

我用這SELECT name FROM sqlite_master WHERE type = "table" AND name = 'create_organization';,以檢查是否存在名爲create_organization表,它works.However我想使用Qt發現out.I我試圖檢查表存在

QSqlQuery query; 
    QString tableName = "employee_datastores"; 
    QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = %1 ").arg(tableName); 
    query.prepare(sqlQuery); 
    query.bindValue(":table", "table"); 
    query.exec(); 
    int fieldNo = query.record().indexOf("employee_datastore_name"); 
    while (query.next()) { 
     QString employee_ds_name = query.value(fieldNo).toString(); 
     qDebug() << "Table Name" << employee_ds_name ; 
    } 

,但它確實不行。

+1

如何「不行」體現? – trojanfoe

回答

6

QSqlDatabase :: tables()給你你想要的東西嗎?例如,你可以嘗試:

if (database.tables().contains(QLatin1String("employee_datastores")) { 
    ... 
} 
2

您可以修復它是這樣的:

QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = '%1' ").arg(tableName); 
query.prepare(sqlQuery); 
query.bindValue(":table", "table"); 
query.exec(); 

但爲什麼混合綁定值和「啞巴」的字符串替換?

QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = :tablename "); 
query.prepare(sqlQuery); 
query.bindValue(":table", "table"); 
query.bindValue(":tablename", tableName); 
query.exec(); 
+0

我創建了幾個表格,tablename是qlineedit的輸入。 – Gandalf

+2

更多使用綁定參數的理由,減少SQL注入的風險。 – Mat

+0

運行這個之後,你究竟在'query'上檢查表是否存在?這個答案的新問題:http://stackoverflow.com/questions/20603109/ – johnbakers

0

這解決了它。

QSqlQuery query; 
    QString tableName = "structure"; 
    QString sqlQuery = QString("SELECT name FROM sqlite_master WHERE type =:table AND name = '%1' ").arg(tableName); 
    query.prepare(sqlQuery); 
    query.bindValue(":table", "table"); 
    query.exec(); 
    int fieldNo = query.record().indexOf("name"); 
    while (query.next()) { 
     QString _name = query.value(fieldNo).toString(); 
     qDebug() << "Table Name" << _name ; 
    } 
+0

你是說它實際上更好地通過一個完整的SELECT查詢,而不是隻檢查表是否存在根據@ jedillama的其他答案? – johnbakers

+0

不,@ JediLlama回答最好。我推薦它。 – Gandalf

+0

@jediLLama的回答不是你接受這個問題的答案,但你推薦它作爲最佳選擇 – johnbakers