C++ Qt(sqlite值和QVector<;T>;::运算符[]:“:”索引超出范围“)
我一直在用Qt编写一个程序,最近我遇到了这两个问题。 问题1: 我有一个sqlite数据库,有1个表和4个列(id、easy、medium、hard)。所有ints。因此,我想检查id是否存在,并得出以下代码:C++ Qt(sqlite值和QVector<;T>;::运算符[]:“:”索引超出范围“),c++,qt,sqlite,qvector,C++,Qt,Sqlite,Qvector,我一直在用Qt编写一个程序,最近我遇到了这两个问题。 问题1: 我有一个sqlite数据库,有1个表和4个列(id、easy、medium、hard)。所有ints。因此,我想检查id是否存在,并得出以下代码: QSqlQuery queryCheck(db); queryCheck.prepare("SELECT EXISTS(SELECT 1 FROM players WHERE id=':id' LIMIT 1)"); queryCheck.bindValue(":
QSqlQuery queryCheck(db);
queryCheck.prepare("SELECT EXISTS(SELECT 1 FROM players WHERE id=':id' LIMIT 1)");
queryCheck.bindValue(":id", c.getId());
int iRand;
qsrand(time(NULL));
for (int i=0;i<9;i++){
iRand = (qrand()%9)+1;
gridBoxUnsolved[i][iRand]=0;
}
但是当我跑的时候
if(queryCheck.exec())
我总是能实现
问题2:
我创建了一个
QVector<QVector<int>> gridBoxUnsolved(9);
for(int outer=0; outer<gridBoxUnsolved.size(); ++outer)
gridBoxUnsolved[outer].resize(9);
QVector gridBoxUnsolved(9);
对于(int-outer=0;outer请尝试以下方法:
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
}
谢谢你的回答。我看到的第二个问题很傻。但是第一个问题我现在有一个不同类型的问题。我向你发布了我试图实现的全部代码:if(queryCheck.exec()&&queryCheck.first()){qDebug()所以,如果它像您所说的那样找到我的人,我想返回1,如果不是,我想用另一个正确的查询创建他,并在我的代码中工作,但它总是转到其他位置,所以我从数据库中得到关于唯一元素的错误(这是正确的,因为我的id是唯一的)您的queryCreate
看起来像什么?qsqlqueryqueryquerycreate(db);queryCreate.prepare(“插入播放器(id,easy,medium,hard)值(:id,:easy,:medium,:hard)”);queryCreate.bindValue(:id,c.getId());queryCreate.bindValue(:easy,0);queryCreate.bindValue(:medium,0);queryCreate.bindValue(:hard,0);