我必须使用C ++和QT库开发社交网络模拟器。 我使用QODBC将用户存储到mysql数据库中。 当我运行我的应用程序时,我抛出一个SIGSEGV错误。
这里,我的函数抛出了这个错误:
QMutex userMutex;
userMutex.lock();
QListIterator<User*> i(users);
User* user;
QString sql = "insert into t_user (id, pseudo, name, firstname, birthdate) values ";
QString bindValue = QString::fromStdString("(?, ?, ?, ?, ?),").repeated(users.count());
sql.append(bindValue);
QSqlQuery query = QSqlQuery(Interface::getCnx());
query.prepare(sql);
while(i.hasNext())
{
user = i.next();
query.addBindValue(QString::number(user->getId()));
query.addBindValue(user->getPseudo());
query.addBindValue(user->getName());
query.addBindValue(user->getFirstname());
QString birthdate = QString::number(user->getBirthDate().year()) + "-" + QString::number(user->getBirthDate().month()) + "-" + QString::number(user->getBirthDate().day());
query.addBindValue(birthdate);
}
query.exec();
userMutex.unlock();
抛出此错误的是“query.exec()”行。
你看到了什么问题吗?
答案 0 :(得分:0)
首先,你在这里有一个额外的逗号:
QString bindValue = QString::fromStdString("(?, ?, ?, ?, ?),").repeated(users.count());
所以或你“重复”字符串计数-1次然后添加“(?,?,?,?,?)”:
QString bindValue = QString::fromStdString("(?, ?, ?, ?, ?),").repeated(users.count() - 1);
bindValue "(?, ?, ?, ?, ?)";
或者您必须删除字符串bindValue的最后一个字符。
答案 1 :(得分:0)
我找到了答案......我猜。 当我减小列表的大小时,此SIGSEGV错误已消失。 在列表包含1000个用户之前,但现在每次调用该用户时只会有800个用户。
感谢您的帮助。