在实现客户端间好友添加功能时,我通过以下函数想实现数据库对好友信息的保存
bool OpeDB::handleAddFriend_repound(const char *pername, const char *name)
{
// pername 被添加方 name 申请添加方
qDebug() << pername << " " << name;
if (pername == NULL || name == NULL)
{
return false;
}
// 先找到对应名字的ID
QString data = QString("select id from usrInfo where name='%1' or name='%2'").arg(pername).arg(name);
qDebug() << data;
QSqlQuery query;
query.exec(data);
query.next();
// 再在friend表格中添加好友关系
qDebug() << query.value(0).toInt() << " " << query.value(1).toInt();
data = QString("insert into friend(id, friendId) values('%1', '%2')").arg(query.value(0).toInt()).arg(query.value(1).toInt());
query.exec(data);
return true;
}
但是我遇到一个问题,代码 qDebug()<<query.value(0).toInt()<<" "<<query.value(1).toInt();访问不到两个数据,让我卡了很久。
后面通过使用GPT才发现,原来是我对.value()的理解是错误的
它里面的数字是访问query所在的那行数据的元素
文字表达有点晦涩,上图:
通过value函数是没办法访问到rose.id的
所以,要么读取先读取jack的id后query.next(),再读取rose的id,要么修改select语句让其直接读取两个用户id
读取两个用户id的语句如下
QString data = QString("select u1.id, u2.id from usrInfo u1, usrInfo u2 where u1.name='%1' and u2.name='%2'").arg(pername).arg(name);