检查表存在
我用这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 ;
}
,但它确实不行。
QSqlDatabase :: tables()给你你想要的东西吗?例如,你可以尝试:
if (database.tables().contains(QLatin1String("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();
但为什么混合绑定值和“哑巴”的字符串替换?
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();
我创建了几个表格,tablename是qlineedit的输入。 – Gandalf
更多使用绑定参数的理由,减少SQL注入的风险。 – Mat
运行这个之后,你究竟在'query'上检查表是否存在?这个答案的新问题:http://*.com/questions/20603109/ – johnbakers
这解决了它。
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 ;
}
你是说它实际上更好地通过一个完整的SELECT查询,而不是只检查表是否存在根据@ jedillama的其他答案? – johnbakers
不,@ JediLlama回答最好。我推荐它。 – Gandalf
@jediLLama的回答不是你接受这个问题的答案,但你推荐它作为最佳选择 – johnbakers
如何“不行”体现? – *foe