Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用cpp在qt中获取sqlite数据库中的行_C++_Sqlite_Qt - Fatal编程技术网

C++ 如何使用cpp在qt中获取sqlite数据库中的行

C++ 如何使用cpp在qt中获取sqlite数据库中的行,c++,sqlite,qt,C++,Sqlite,Qt,如何访问sqlite数据库中的一行并在列表中返回数据。我试过这个 QList<QVariant> DBManager::getUserData(QString usrNam, QString psswrd) { QSqlQuery query; query.prepare("SELECT First_Name, Last_Name, Email, Username, Password" " FROM U

如何访问sqlite数据库中的一行并在列表中返回数据。我试过这个

QList<QVariant> DBManager::getUserData(QString usrNam, QString psswrd)
{
    QSqlQuery query;
    query.prepare("SELECT First_Name, Last_Name, Email, Username, Password"
                  " FROM Users WHERE Username = :usrNam AND Password = :psswrd");
    query.bindValue(":usrNam", usrNam);
    query.bindValue(":psswrd", psswrd);
    query.exec();

    QSqlRecord rec = query.record();
    QList<QVariant> list;
    int idCol = rec.indexOf("First_Name");

    if(idCol == -1){
        qDebug() << "Db is empty";
    }else{
        while(query.next()){
            list.append(query.value(idCol));
            list.append(query.value("Last_Name"));
            list.append(query.value("Email"));
            list.append(query.value("Username"));
            list.append(query.value("Password"));
        }
    }
    return list;
}
QList DBManager::getUserData(QString usrNam,QString psswrd)
{
QSqlQuery查询;
查询.准备(“选择名字、姓氏、电子邮件、用户名、密码”
“来自用户名=:usrNam和密码=:psswrd”的用户”;
query.bindValue(“:usrNam”,usrNam);
query.bindValue(“:psswrd”,psswrd);
exec();
QSqlRecord rec=query.record();
QList列表;
int idCol=rec.indexOf(“名字”);
if(idCol==-1){

qDebug()如果要访问单行,不需要使用
QSqlRecord
。只需使用
QSqlQuery::first
。示例:

QList<QVariant> DBManager::getUserData(QString usrNam, QString psswrd)
{
    QSqlQuery query;
    query.prepare("SELECT First_Name, Last_Name, Email, Username, Password"
                  " FROM Users WHERE Username = :usrNam AND Password = :psswrd");
    query.bindValue(":usrNam", usrNam);
    query.bindValue(":psswrd", psswrd);

    QList<QVariant> list;

    if (!query.exec()) {
        qDebug() << "Query failed!";
    } else {
        if (query.first()) { // get the first record in the result,
            list.append(query.value("First_Name"));
            list.append(query.value("Last_Name"));
            list.append(query.value("Email"));
            list.append(query.value("Username"));
            list.append(query.value("Password"));
        } else {
            qDebug () << "Data not found";
        }
    }

    return list;
}
然后使用
User
类型的
QVector
(而不是
QList
):

QVector<User> list;
QVector列表;

QVector
将其数据存储在连续内存中,因此它比使用
QList

更快。如果要访问一行,不需要使用
QSqlRecord
。只需使用
QSqlQuery::first
即可。示例:

QList<QVariant> DBManager::getUserData(QString usrNam, QString psswrd)
{
    QSqlQuery query;
    query.prepare("SELECT First_Name, Last_Name, Email, Username, Password"
                  " FROM Users WHERE Username = :usrNam AND Password = :psswrd");
    query.bindValue(":usrNam", usrNam);
    query.bindValue(":psswrd", psswrd);

    QList<QVariant> list;

    if (!query.exec()) {
        qDebug() << "Query failed!";
    } else {
        if (query.first()) { // get the first record in the result,
            list.append(query.value("First_Name"));
            list.append(query.value("Last_Name"));
            list.append(query.value("Email"));
            list.append(query.value("Username"));
            list.append(query.value("Password"));
        } else {
            qDebug () << "Data not found";
        }
    }

    return list;
}
然后使用
User
类型的
QVector
(而不是
QList
):

QVector<User> list;
QVector列表;

QVector
将其数据存储在连续内存中,因此它比使用
QList

>更快,但程序崩溃。不是很有帮助。您是否尝试通过调试器运行它?程序到底在哪里崩溃?>但程序崩溃。不是很有帮助。您是否尝试通过调试器运行它?在哪里崩溃ly程序是否崩溃?感谢Qvector的建议。实现了您建议的解决方案,并返回了“未找到数据”,但数据库中有数据。运行query.isActive()和query.isSelect()并在这两种情况下均为true。尝试直接在数据库上运行完全相同的查询(使用sqlitestudio)。您的参数必须具有不正确的值。它正在运行!!!!!您是对的。我使用了错误的参数。错误发生在测试整个数据库管理器类时。我在检索数据之前测试了删除操作,因此在调用getUserData(…)时,用户已不存在。我的逻辑错误:(.ThanksThanks感谢Qvector建议。实现了您建议的解决方案,并返回了“未找到数据”,但数据库中有数据。运行query.isActive()和query.isSelect()并在这两种情况下均为true。尝试直接在数据库上运行完全相同的查询(使用sqlitestudio)。您的参数必须具有不正确的值。它正在运行!!!!!您是对的。我使用了错误的参数。错误发生在测试整个数据库管理器类时。我在检索数据之前测试了删除操作,因此在调用getUserData(…)时,用户已不存在。我的逻辑错误:(。谢谢