- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
出于测试目的,我试图在实际运行之前从 QSqlQuery
对象中获取准备好的语句字符串。
我检查了 lastQuery()
和 executedQuery()
方法,但它们都不起作用。
void foo(QSqlQuery& q)
{
QString statement = q.lastQuery();
// statement is empty unless exec() is called
}
QSqlQuery q(myDb);
q.prepare("SELECT * FROM Foo;");
foo(q);
我想要一种方法来取回 prepare()
参数字符串。
最佳答案
查看 Qt 源代码,我发现字符串在 prepare
方法中结束的位置:
...
if (query.isEmpty()) {
qWarning("QSqlQuery::prepare: empty query");
return false;
}
#ifdef QT_DEBUG_SQL
qDebug("\n QSqlQuery::prepare: %s",query.toLocal8Bit().constData());
#endif
return d->sqlResult->savePrepare(query);
其中sqlResult
是一个私有(private)的QSqlQueryPrivate
对象。所以我想说从那里获取字符串可能很复杂。
不过,我想到了一个解决方案。子类 QSqlQuery
,设置一个 QString
属性来保存准备好的语句。然后重新定义 QSqlQuery::prepare()
以便将值存储在属性中,然后执行原来的工作:
bool TestQSqlQuery::prepare(const QString& query){
this->m_preparedQuery = query;
return QSqlQuery::prepare(query);
}
然后创建一个 getPreparedQuery
方法来在任何给定时间检索值。
我不认为这是一个“干净”的解决方案,但它可能对您有所帮助。
关于c++ - QSqlQuery:在执行前获取准备好的语句字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456084/
我正在检查我创建的应用程序的内存使用情况。它进行多次调用以从数据库 (SQLite 3) 读取和写入值。我观察到以下内容: QSqlQuery::exec() 使用一些 KB 的 RAM 来执行给定的
文档在这个主题上有点含糊: 来自 void QSqlQuery::clear() : Clears the result set and releases any resources held by
我有很多 C++11 线程在运行,它们有时都需要数据库访问。在主要我做初始化数据库连接并打开数据库。 Qt 文档说查询不是线程安全的,所以我使用全局互斥锁,直到 QSqlQuery 存在于线程中。 这
我正在尝试从数据库中检索用户,他们的名字是 'DOMAIN\name'。 我已经在 sql 控制台中检查了查询,简单的选择如下: select * from users where name='DOM
SHA256 sha256; std::string s = sha256(pass.toStdString()); QString myquery = "declare @identifier nv
我正在尝试将一个字符插入到表格的列中。而是插入字符的十进制代码。如何插入字符? 详细信息: QString insertSql; insertSql .append("INSERT INTO
QMake 版本 3.0 Qt 版本 5.0.2 使用时 QSqlQuery query(QString("SELECT device_text_id FROM device")); qDebug()
我尝试用 Qt 创建一个 SQLite 数据库,我做到了!!我将我的数据库命名为“prova_db”,它包含下表: marker_db id site (columns) 0 www
我有自己的数据存储机制来存储数据。但我想为最终用户实现标准的数据操作和查询接口(interface),所以我认为 QT sql 适合我的情况。但我仍然不明白如何将索引用于 sql 查询。比方说,我有包
如何取消长时间运行的QSqlQuery? 数据库正在返回超过 300 万行,并且显示在 QTableView 控件中。我希望能够强制停止这两个长时间操作: 当数据库正在运行一个长时间的操作时 如果数据
正在关注 QSqlQuery Class documentation可以在 MySQL 数据库中实现插入操作,即像这样: QSqlQuery query; query.prepare("INSERT
当运行下面的代码时,Windows 中的结果是 'אבגדה' 和 '??????'在Linux上,似乎qry.value(0)(一种 QVarient 类型)使用默认编码。在 Linux 中,我在驱
我使用 PyQt4.QtSql.QSqlQuery。我从表单中获取值并想将它们插入到数据库中。我打开一个连接并尝试添加,但数据库中没有值,也没有错误。有什么问题? db = QSql
我正在尝试选择我的日期库的一个字段,代码是: if (db.db().isOpen()) { qDebug() << "OK"; QSqlQuery query("SELECT state F
出于测试目的,我试图在实际运行之前从 QSqlQuery 对象中获取准备好的语句字符串。 我检查了 lastQuery() 和 executedQuery() 方法,但它们都不起作用。 void fo
我最近才发现 gmock,现在正在“重新思考整个编程过程”,尽可能地添加单元测试。在此过程中让我感到奇怪的一件事是 QSql 模块显然是我们代码的外部依赖项,并没有为开发人员提供模拟其内部的工具。对于
我正在尝试使用此代码使用 qt 进行删除: int jobId = 655; query.prepare("DELETE FROM jobs WHERE jobId = '" + QString::n
我在 Qt 的 sqlite 数据库中看到莫名其妙的缓慢行为。下面代码中的查询,当从同一数据库上的 sqlite 命令行实用程序执行时,会立即完成。 qDebug() textFormIds; if
我想实现一种方法,该方法将在退出程序时检查搜索具有 localhost ip 地址的条目并删除这些行。 问题是,我不确定如何在 Qt 中执行此操作,当我搜索时,我真的找不到任何具体的东西。有没有办法在
我正在使用带有 Qt 提供程序的 firebird 嵌入式数据库。为了使用数据库,我使用 qsqlquery::exec() 函数。这个函数是同步的还是异步的? 最佳答案 QSqlQuery::exe
我是一名优秀的程序员,十分优秀!