我使用这个SELECT name FROM sqlite_master WHERE type = "table" AND name = 'create_organization';
来检查名为create_organization的表是否存在并且它是否有效。但是我想使用qt来找出它。我正在尝试
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 ;
}
但它不起作用。
答案 0 :(得分:8)
QSqlDatabase :: tables()能为您提供所需内容吗?例如,您可以尝试:
if ( database.tables().contains( QLatin1String("employee_datastores") ) {
...
}
答案 1 :(得分: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();
答案 2 :(得分:0)
这解决了它。谢谢Mat。
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 ;
}
答案 3 :(得分:0)
使用database.tables(QSql :: AllTables)这将向您显示所有表,包括主表。只需对正确答案进行一小段编辑:我的编辑是(QSql :: AllTables)
if ( database.tables(QSql::AllTables).contains( QLatin1String("employee_datastores") ) {
... }