【问题标题】:QSqlQuery doesn't answer correctlyQSqlQuery 没有正确回答
【发布时间】:2013-01-13 23:10:25
【问题描述】:

我尝试用 Qt 创建一个 SQLite 数据库,我做到了!我称我的数据库为“prova_db”,它包含下表:

marker_db

id     site (columns)
0      www.google.it
1      www.youtube.it
2      www.facebook.it

然后,我尝试查询我的 prova_db。这是代码:

int main () {
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("prova_db");
    if (!db.open()) { printf("DB doesn't exist\n");}
    else  {
        QSqlQuery query1;
            query1.exec( "SELECT site FROM marker_db WHERE id = 1");

        int i = query1.numRowsAffected();
        printf("result row: %d\n", i);
        while(query1.next()){
            QString str = query1.value(0).toString();
            printf("result: %s\n", str);
        }
    }
    db.close();
return 0;
}

结果是:

result row : 0
result : (strange char)

结果应该是:

result row: 1
result : www.youtube.it

我哪里做错了??

谢谢!

【问题讨论】:

  • 用英文写代码怎么样?恐怕这里不是每个人都会说意大利语;)

标签: c++ sqlite qt qsqlquery


【解决方案1】:

我认为您的期望是错误的:numRowsAffected() 的结果告诉您查询已更改了多少行。您的查询不会改变任何内容,因此结果应该是0 或未定义。因此,您不应该期望第一个输出是risultato riga: 1。请改用size() 方法来找出与您的SELECT 查询匹配的行数。

第二个问题是您将QString 对象传递给printf(),它需要一个指向char 值的空终止数组的指针(当您使用%s 格式说明符时)。您需要将 QString 对象转换为指向 C 字符数组的指针。

【讨论】:

  • 对不起。我改变了意大利语单词。我将query1.numRowsAffected(); 更改为query1.size();,结果行是-1。另外,如何将 QString 对象转换为指向字符数组的指针?谢谢你的回答!
  • :) 好的,这只是一个建议。我确实理解,但是这个论坛上的一些人可能跳过了这个问题,因为他们不想打扰外语。反正我的回答对你有帮助吗?
  • 是的,谢谢!由于:link,我能够将 QString 对象转换为 o 字符数组。现在result 是www-youtube.it,但我不明白为什么query1.size() 是-1
  • @Cristina1986:此链接可能有帮助:harmattan-dev.nokia.com/docs/library/html/qt4/…:“返回结果的大小(返回的行数),如果大小无法确定或数据库无法确定,则返回 -1不支持报告有关查询大小的信息”。我必须假设您的数据库不支持返回有关查询大小的信息
  • @Cristina1986:无论如何,您仍然可以创建一个counter 变量,将其初始化为0,然后在while 循环内执行counter++ 以获得结果的大小。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多