我有一个非常简单的 MySQL 表,想使用 QSqlQuery 选择一些行。
我已连接到我的本地开发 mysql 服务器(Windows;64 位)。
当我使用 mysql workbench 等其他工具运行 SELECT 查询时,我总是得到正确的结果(当然!)。
对 QSqlQuery 做同样的事情根本不会给我任何行!
QString sql = "SELECT `ID`, `Name`, `ModbusID`, `DeviceType` FROM `Devices`;";
qDebug() << sql;
QSqlQuery query(m_db);
if(!query.prepare(sql))
{
qFatal("could not prepare query");
return;
}
if(!query.exec())
{
qFatal("could not execute query");
return;
}
while(query.next())
qDebug() << "result";
qDebug() << "finished.";
SQL 表定义
CREATE TABLE IF NOT EXISTS `Devices` (
`ID` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`MeasurementID` INT UNSIGNED NOT NULL,
`Name` VARCHAR(255) NOT NULL,
`ModbusID` TINYINT UNSIGNED NOT NULL,
`DeviceType` INT NOT NULL,
`TimestampCreated` DATETIME NOT NULL,
`TimestampLastModified` DATETIME,
FOREIGN KEY(`MeasurementID`) REFERENCES `Measurements`(`ID`) ON DELETE CASCADE,
UNIQUE (`MeasurementID`, `Name`)
);
在这两个程序中,我都连接到同一个本地 mysql 实例。我的机器上或网络上没有其他 mysql 服务器。这发生在 Oracle 的 MySQL 和 MariaDB 上!所以问题一定出在我的程序中。
我做错了什么还是这里发生了什么?
更新经过多次测试,问题仅在我选择ModbusID
. 我将表定义从
`ModbusID` TINYINT UNSIGNED NOT NULL,
至
`ModbusID` INT UNSIGNED NOT NULL,
现在它可以工作了。看起来像QT 中的错误。但我不认为这是一个好的解决方案。如果您知道使用方法,TINYINT
请写下答案或评论!