c++ - QSqlQuery禁止非SELECT查询

标签 c++ sql qt

我正在寻找一种方法来禁止对 QSqlQuery 对象进行非 SELECT 查询。

我知道 QSqlQuery::isSelect 只有在 QSqlQuery::exec 之后才有效(损坏 已经在这里完成了)。

那么,有没有办法做到这一点,或者我必须显式验证查询字符串

谢谢。

最佳答案

根据我的经验,即使在运行 QSqlQuery::exec 命令之前,QSqlQuery::isSelect 函数也能正常工作。但仅当使用查询初始化对象时。即:

QSqlQuery query("SELECT * FROM someTable");
qDebug() << query.isSelect(); //Outputs True

QString queryString = "SELECT * FROM someTable";
QSqlQuery query(queryString);
qDebug() << query.isSelect(); //Outputs True

如果您正在使用 prepare 函数并将查询字符串传递给它,那么您将必须自己验证查询字符串。即;

QSqlQuery query;
query.prepare("SELECT * FROM someTable");
qDebug() << query.isSelect(); //Outputs False

如果你真的想避免手动验证查询字符串,你将不得不避免使用 QSqlQuery::prepareQSqlQuery::bindValue 函数,而是创建查询自己并使用您创建的 QString 初始化 QSqlQuery 对象。

关于c++ - QSqlQuery禁止非SELECT查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022804/

相关文章:

sql - 字符串按函数与其他聚合函数按组连接

c++ - 带有 this 的非静态 void 成员指针函数的 vector

c++ - 中断语句不起作用

c++ - 使用 GoogleTest 访问私有(private)成员

linux - 在 Linux(Debian 发行版)上安装 Qt

qt - 第一次发射信号后自动断开

c++ - 如何将字符串更改为 QString?

c++ - 从类调用时,SDL 不会在窗口中显示图像

sql - 如何在SQL中显示两个给定日期之间的所有日期

sql - Rails - has_one 关系 : scopes for associated and non-associated objects