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

时间:2017-03-27 09:47:59

标签: c++ qt sqlite qvector

我一直在Qt写一个程序,最近我遇到了这两个问题。 问题1: 我有一个sqlite数据库,包含1个表和4列(id,easy,medium,hard)。所有的一切。所以我想检查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行         该计划意外地完成了。

2 个答案:

答案 0 :(得分:0)

试试这个:

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的数字,这就是你想要的。

答案 1 :(得分:0)

所以我找到了问题的解决方案。

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
}