簡體   English   中英

從QT C ++中的函數返回SQL數據

[英]Returning SQL Data from functions in QT C++

我是C ++(QT)的非常初學者,通常我曾經使用過PHP / MYSQL進行網絡,Python進行服務器任務等...,我想學習C ++,並且在我的工作中有一個項目需要一個守護程序,以及一些互相交談的客戶,我想用C ++創建它。

我正在尋找一些處理SQL返回數據的示例,正​​在創建類似get_user()的函數; get_users(); 等...,我應該對此做些什么,在PHP中,我只需要將它們放入數組中,瞧,就返回了。

QT C ++的最佳做法是什么? 在網絡上的許多示例中,它們都是在主要功能中完成的,因此這對我沒有太大幫助,我的數據庫事務將位於單獨的標頭/源文件(類)中。

我的代碼現在的一些示例:

main.cpp中

#include <QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include "database_mysql.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    database_mysql db;

    // should have here an object or an array so that i could work with it...

    db.test_query();

    return a.exec();
}

database_mysql.h

#ifndef DATABASE_MYSQL_H
#define DATABASE_MYSQL_H
#include <QtSql/QSql>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlQuery>
#include <QtDebug>

class database_mysql
{

    QSqlDatabase m_database;



public:
    database_mysql();
    ~database_mysql();

    bool connect();
    void disconnect();
    //This should not be a bool...
    bool test_query();

};

#endif // DATABASE_MYSQL_H 

database_mysql.cpp

#include <QtSql/QSql>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlQuery>
#include <QtDebug>
#include "database_mysql.h"


// Constructer
database_mysql::database_mysql()
{

}


// Desctructer
database_mysql::~database_mysql()
{
    disconnect();
}


bool database_mysql::connect()
{
    bool result = false;
    // Connect the database, for the moment still static defined
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("anna");
    db.setUserName("anna");
    db.setPassword("anna");
    if(!db.open()){
        qDebug() << "Not Connectd";
    }else{
        qDebug() << "Database Connected";
        result = true;
    }
    return result;
}


void database_mysql::disconnect()
{
 if (m_database.open())
 {
     m_database.close();
 }
}


bool database_mysql::test_query()
{
    bool result = false;
    if(!connect()){
        qDebug() << "Database Not Connected!";
    }else{
        QSqlQuery query;
        query.exec("SELECT * FROM sys_user");
        while (query.next()){
            QString name = query.value(1).toString();
            qDebug() << "Name: " << name;
        }
        result = true;
    }
    return result;
}

我確實在網上搜索了此信息,很難找到此類信息,如果您有此類信息,則非常感謝提示/網址。

非常感謝,

正如Martin所寫,您只能使用數組或列表。 這是帶有QList的示例。 我選擇將列表作為參考參數移交,因此您仍然將布爾值作為成功指示符作為返回值。

main.cpp中

#include <QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QList>
#include "database_mysql.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    database_mysql db;

    QList<QString> names;

    db.test_query(names);

    for_each(QString name, names){
      qDebug()<< "Name: " << name;
    }

    return a.exec();
}

database_mysql.h

#ifndef DATABASE_MYSQL_H
#define DATABASE_MYSQL_H
#include <QtSql/QSql>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlQuery>
#include <QtDebug>

class database_mysql
{

    QSqlDatabase m_database;



public:
    database_mysql();
    ~database_mysql();

    bool connect();
    void disconnect();
    //This should not be a bool...
    bool test_query(QList<QString>& namesList);

};

#endif // DATABASE_MYSQL_H 

database_mysql.cpp

#include <QtSql/QSql>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlQuery>
#include <QtDebug>
#include "database_mysql.h"


// Constructer
database_mysql::database_mysql()
{

}


// Desctructer
database_mysql::~database_mysql()
{
    disconnect();
}


bool database_mysql::connect()
{
    bool result = false;
    // Connect the database, for the moment still static defined
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("anna");
    db.setUserName("anna");
    db.setPassword("anna");
    if(!db.open()){
        qDebug() << "Not Connectd";
    }else{
        qDebug() << "Database Connected";
        result = true;
    }
    return result;
}


void database_mysql::disconnect()
{
 if (m_database.open())
 {
     m_database.close();
 }
}


bool database_mysql::test_query(QList<QString>& namesList)
{
    bool result = false;
    namesList.clear();//clear possible old entries

    if(!connect()){
        qDebug() << "Database Not Connected!";
    }else{
        QSqlQuery query;
        query.exec("SELECT * FROM sys_user");
        while (query.next()){
            QString name = query.value(1).toString();
            namesList.append(name);
        }
        result = true;
    }
    return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM