[英]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.