Mysql QSqlRecord:从QT中的SQLite表访问数值,结果为空
我的问题与我见过的一些问题类似,但解决方案似乎对我不起作用,因此我将添加一个新的问题: 我正试图通过以下查询将SQLite表中最高用户ID的数值访问到我的QT程序中:Mysql QSqlRecord:从QT中的SQLite表访问数值,结果为空,mysql,qt,sqlite,record,Mysql,Qt,Sqlite,Record,我的问题与我见过的一些问题类似,但解决方案似乎对我不起作用,因此我将添加一个新的问题: 我正试图通过以下查询将SQLite表中最高用户ID的数值访问到我的QT程序中: SELECT Name, MAX(ID) FROM User_lib; 这在命令shell中工作,并获得预期的结果 然后,我尝试通过以下方式访问最大ID值: QSqlQuery qry_ID; qry_ID.prepare("SELECT Name, MAX(User_lib.ID) FROM User_lib");
SELECT Name, MAX(ID) FROM User_lib;
这在命令shell中工作,并获得预期的结果
然后,我尝试通过以下方式访问最大ID值:
QSqlQuery qry_ID;
qry_ID.prepare("SELECT Name, MAX(User_lib.ID) FROM User_lib");
qry_ID.exec()
qDebug() << qry_ID.record().value("ID").toInt();
我在其他几个答案中看到的结果给了我-1。
另一方面,
qDebug() << "Number of columns: " << qry_ID.record().count();
按预期为我提供列数2。查询似乎没有给出任何结果
起初,我认为我的查询有问题,但当我试图计算查询中的行数时,同样的事情也发生了。当查询表显示时,我可以正确地添加元素,等等,所以我想我一定是在QT中做错了什么 让我们看看您在命令行shell中实际得到了什么: sqlite> .mode columns sqlite> .header on sqlite> SELECT Name, MAX(ID) FROM User_lib; Name MAX(ID) ---------- ---------- user30248 8562493 因此,在从查询获得的输出中,第二列的名称不是ID,而是MAXID 事实上,报告说: 如果存在AS子句,则结果列的名称是该列的AS子句的值。如果没有AS子句,则列的名称未指定,并且可能会从一个SQLite版本更改为下一个版本 因此,使用AS或通过其索引访问列
SQLite根据需要计算输出行,因此在读取所有行之前不可能给出行的计数。因此,SQLite驱动程序不支持它。我还没有检查上面CL的答案,我相信它也会起作用,但我已经设法找到了一个对我有用的替代解决方案,可能会很有趣。由于QsqlQuery的内部指针设置为第一条记录前面的一个字段,因此我必须继续下一条记录。这是有效的代码:
QSqlQuery qry_ID;
qry_ID.prepare("SELECT Name, MAX(ID) FROM User_lib");
qry_ID.exec();
qry_ID.next();
QString name = qry_ID.value(0).toString();
int IDmax = qry_ID.value(1).toInt();
如果需要访问不同的行,则需要while循环,但这是另一个问题。如何获取qry\u ID值?这是查询名称:qry\u ID.prepareSELECT name,来自User\u lib的MAXUser\u lib.ID;将相应地编辑我的问题。但您执行了吗?如果是,如何进行?请显示更多的代码。我刚刚澄清了上面的代码。回答您的问题:是的,我执行了它。qry_ID.lastError.text返回什么?
QSqlQuery qry_ID;
qry_ID.prepare("SELECT Name, MAX(ID) FROM User_lib");
qry_ID.exec();
qry_ID.next();
QString name = qry_ID.value(0).toString();
int IDmax = qry_ID.value(1).toInt();