2011-11-26 72 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