从另一个类调用时,类中的Sqlite3无法正常工作

时间:2019-02-13 00:54:57

标签: sqlite

我正在编码简单项目,现在有2个类。 一种用于数据库,另一种用于auth方法。

Auth方法类使用数据库类的实例,并且一切正常,但是当我想执行一些代码以从数据库中读取数据时,它就不会陷入低谷。 SQL Query会按预期生成,但不会执行(回调函数中的cout语句永远不会打印出来)。

当我想同时使用主文件中的两个类以及想要使用不需要数据库的函数时,一切都很好。

SO: 尝试不在auth类中包含db实例,而是使用主文件进行测试,并且可以这样工作。

//main file
int main()
{
    database db("database.db");
    auth auth(db);

    string email = "mail.com";
    string pass = "medo";
    std::cout << auth.password(&pass, &email);

    //database.h
};
class database {
public:
    database(const char* path);
    string hash(string* data);
    dbUserData checkUser(string* email);

private:
    sqlite3* db;
    static int callbackUsers(void* dataptr, int argc, char** argv, char** azColName);
};

//database.cpp

dbUserData database::checkUser(string* email)
{

    dbUserData dataread;
    dbUserData* data = &dataread;
    std::string _query = fmt::format("SELECT * from users where eMail = '{0}';", *email);
    //std::string _query = "SELECT * from users where eMail = 'ivik@outlook.com';";
    const char* query = _query.c_str();
    std::cout << query << std::endl;
    rc = sqlite3_exec(db, query, callbackUsers, (void*)data, &zErrMsg);

    if (rc) {
        ;
        //fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        //return (false);
    }
    else {

        //fprintf(stdout, "Opened database successfully\n");
        //return (true);
    }
    //std::cout <<"Output should be"<< dataread.password << std::endl;
    return dataread;
}

//auth.h

using std::string;
class auth {
public:
    auth(database _db);
    bool password(string* pass, string* email);

private:
    database* db;
};

//auth.cpp

auth::auth(database _db)
{
    db = &_db;
}

bool auth::password(string* pass, string* email)
{
    string b = db->checkUser(&mail).password; //RETURNS BLANK STRING
    std::cout << "b" << b << std::endl;
    if (a == b)
        return true;

    return false;
}

0 个答案:

没有答案