繁体   English   中英

Qt(sqlite值和QVector <T> :: operator []:“索引超出范围”)

[英]Qt (sqlite value and QVector<T>::operator[]: “index out of range”)

我一直在用Qt编写程序,最近遇到了这两个问题。 问题1:我有一个带1个表和4列(id,easy,medium,hard)的sqlite数据库。 所有整数。 所以我想检查id是否存在并想出以下代码:

    QSqlQuery queryCheck(db);
    queryCheck.prepare("SELECT EXISTS(SELECT 1 FROM players WHERE id=':id' LIMIT 1)");
    queryCheck.bindValue(":id", c.getId());

但是当我跑步时

    if(queryCheck.exec())

我总是对的。

问题2:我创建了一个数字,

QVector<QVector<int>> gridBoxUnsolved(9);
for(int outer=0; outer<gridBoxUnsolved.size(); ++outer)
    gridBoxUnsolved[outer].resize(9);

我想将一些值随机更改为0。我考虑过将每个“内部” QVector更改为1的随机值更改为0。所以我想到了以下代码:

int iRand;
qsrand(time(NULL));
for (int i=0;i<9;i++){
    iRand = (qrand()%9)+1;
    gridBoxUnsolved[i][iRand]=0;
}

但是,有时Qt可以正常工作,但是大多数情况下它会崩溃并返回以下内容:QVector :: operator []中的ASSERT失败:“索引超出范围”,文件/opt/Qt/5.8/gcc_64/include/QtCore/qvector。 h,第437行程序意外完成。

尝试这个:

QSqlQuery queryCheck(db);
queryCheck.prepare("SELECT 1 FROM players WHERE id=':id' ");
queryCheck.bindValue(":id", c.getId());

if(queryCheck.exec() && queryCheck.first()) // you found your guy

第二个问题-删除+1

iRand = (qrand()%9)+1;

qrand()%9将为您提供一个从0到8的数字。

所以我找到了解决问题的办法。

QSqlQuery query(db);
query.prepare("SELECT COUNT(*) AS N FROM table WHERE id=:id ");

然后执行此操作以检查:

query.exec();
query.next();
int N=query.value(0).toInt();
if(N) {
    // You found the record
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM