代码之家  ›  专栏  ›  技术社区  ›  user30248

QSqlRecord:从QT中的SQLite表中访问数值,结果为空

  •  0
  • user30248  · 技术社区  · 8 年前

    我的问题与我见过的一些问题类似,但解决方案似乎对我不起作用,因此我将添加一个新的问题:

    SELECT Name, MAX(ID) FROM User_lib;
    

    然后,我尝试通过以下方式访问最大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();
    

    结果为零(如果我使用 toString() )

    此外,作为测试

    qDebug() << "Number of Rows: " << qry_ID.size();
    

    我在其他几个答案中看到,这给了我-1。

    qDebug() << "Number of columns: " << qry_ID.record().count();
    

    按预期为我提供“列数2”。查询似乎没有给出任何结果。

    起初我认为我的查询有问题,但当我试图计算查询中明显正常工作的行时,同样的事情也发生了(显示了表,我可以正确添加元素等等),所以我认为我在QT中一定做错了什么。

    2 回复  |  直到 8 年前
        1
  •  1
  •   CL.    8 年前

    让我们看看在命令行shell中实际得到了什么:

    sqlite> .mode columns
    sqlite> .header on
    sqlite> SELECT Name, MAX(ID) FROM User_lib;
    Name        MAX(ID)
    ----------  ----------
    user30248   8562493
    

    因此,在从查询获得的输出中,第二列没有命名 ID 但是 MAX(ID) .

    这个 documentation 实际上说:

    AS ,或通过其索引访问列。


    SQLite根据需要计算输出行,因此在读取所有行之前不可能给出行数。因此 the QuerySize feature SQLite驱动程序不支持。

        2
  •  1
  •   user30248    8 年前

    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循环,但这是另一个问题。