Qt(sqlite 值和 QVector<T>::operator[]:"index out of range")
Qt (sqlite value and QVector<T>::operator[]: "index out of range")
我一直在用 Qt 编写程序,最近遇到了这两个问题。
问题一:
我有一个包含 1 table 和 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())
我总是正确的。
问题二:
我已经创建并填充了数字
QVector<QVector<int>> gridBoxUnsolved(9);
for(int outer=0; outer<gridBoxUnsolved.size(); ++outer)
gridBoxUnsolved[outer].resize(9);
我想将一些值随机更改为 0。我考虑过每个 "inner" QVector 将 1 个随机值更改为 0。所以我想出了这个代码:
int iRand;
qsrand(time(NULL));
for (int i=0;i<9;i++){
iRand = (qrand()%9)+1;
gridBoxUnsolved[i][iRand]=0;
}
然而,有时 Qt 工作正常,但大多数时候会崩溃,return 出现以下情况:
QVector::operator[] 中的 ASSERT 失败:"index out of range",文件 /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
}
我一直在用 Qt 编写程序,最近遇到了这两个问题。 问题一: 我有一个包含 1 table 和 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())
我总是正确的。
问题二: 我已经创建并填充了数字
QVector<QVector<int>> gridBoxUnsolved(9);
for(int outer=0; outer<gridBoxUnsolved.size(); ++outer)
gridBoxUnsolved[outer].resize(9);
我想将一些值随机更改为 0。我考虑过每个 "inner" QVector 将 1 个随机值更改为 0。所以我想出了这个代码:
int iRand;
qsrand(time(NULL));
for (int i=0;i<9;i++){
iRand = (qrand()%9)+1;
gridBoxUnsolved[i][iRand]=0;
}
然而,有时 Qt 工作正常,但大多数时候会崩溃,return 出现以下情况: QVector::operator[] 中的 ASSERT 失败:"index out of range",文件 /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
第二个问题-删除
中的+1iRand = (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
}